Java:【面向对象:类的定义,静态变量,成员变量,构造函数,封装与私有,this】


本文内容:

  • 什么是面对对象
  • 类的定义与对象实例化
  • 成员变量
    • 成员变量的有效范围
    • 成员变量的赋值
  • 静态变量、方法与实例变量、方法
  • 构造函数
  • 封装与私有
  • this关键字

 

注:函数和方法是同样东西。【因为我以前学习的时候有些书籍不是一样的说法,书看多了,我就习惯了不一样状况下用不一样的说法】java

 

首发时间:2018-03-22安全


什么是面对对象:

 

  • 面向对象强调行为处于对象之中,并不直接执行行为,而是经过对象执行行为
  • 类是对象的抽象,对象是类的具体实例。 【能够说,人是一个类,而不一样身份的你我他是一个具体实例。人这个类抽象出了咱们人类共有的属性,而咱们人是人类的各类属性的具体实例结果。】
  • 面向对象的基本特征:封装,继承,多态
    • 封装:好比一个对象把它的属性和方法都封装起来的话,它执行的属性和方法都是这个对象的,而不是其余对象的。
    • 继承:子类能够继承父类的属性和方法。好比“人类”继承了“哺乳类”的属性和方法,又增添人类独有的属性和方法。
    • 多态:一种多态是指同一个操做被不一样对象执行时有不一样的结果(好比:狗的say是“汪汪汪”,而猫的是"喵喵喵");另外一种多态是根据对象的传入而决定执行不一样的方法。【本质上这两个是同样的】

 


类的定义与对象实例化:

 

类的定义:

  • 类的定义包括两部分:类声明和类体
  • 类是java程序的基本要素
  • 定义类的格式:image
    • 修饰符能够是public 或空: public表明即便不一样包也能访问该类;而空表明只能该类只能在同一个包内访问。
    • 类体的内容包括变量的生命和方法的定义。【因此单独的定义是错误的,只能声明并同时定义】
      • image
      • image

 

对象实例化

  • 类的实例化就是建立一个对象:
    • 建立对象:类名 变量名 =new 类名()【类名()能够传入一些参数来初始化对象,由类的同名方法(构造方法,下面讲)定义能传入什么参数】
      • image
      • 匿名对象:简单来讲就是没有变量名的实例化,直接使用new 类名()来执行操做,因为没有变量名来特异的标记一片内存空间,因此匿名对象通常只使用一次,好比new Dog().hello();
    • 调用方法或变量:对于实例方法或变量的能够直接使用对象来调用;而对于静态方法或变量,既可使用对象,也可使用类来调用。
      • image
      • image

 

 


class Dog{
    String name;
    int foot=4;
    Dog(){//这是一个构造函数
        this.name="旺财";
    }
    void hello() {
        System.out.println("hello,this is a dog");
    }
    static void static_hello() {
        System.out.println("hello,this is a dog too");
    }


}

public class Demo {

    public static void main(String args[]) {
        
        Dog d=new Dog();
        System.out.println(d.foot);//4
        d.hello();//hello,this is a dog
        d.static_hello();//hello,this is a dog too
        Dog.static_hello();//hello,this is a dog too
        
    }
}


        成员变量:

         

        成员变量的有效范围

        • 成员变量在整个类范围内有效,与变量声明的位置无关。方法中的局部变量从声明它的位置开始生效,而且只在方法体内有效。
        • 当局部变量跟成员变量同名时,若是想特别的使用成员变量,可使用“this.变量名”
        • 成员变量有默认值,而局部变量没有默认值。

         

        成员变量的赋值:

        • 可使用构造函数来对一些成员变量初始化
        • 若是成员变量不是私有的,也能够直接取得变量名来赋值,好比dog.age=18


        静态变量、方法与实例变量、方法:

         

        根据变量、方法是否有static修饰能够分为实例变量,实例方法和静态变量(类变量),静态方法(类方法)函数

         

        • 静态变量,静态方法:

          • 被static修饰的成员的特色:学习

            • 随着类的加载而加载,优先于对象存在,静态成员内存位于方法区this

            • 被全部对象所用享【因此可称为类变量或类方法】spa

            • 能够直接类名调用3d

            • 静态方法只能访问静态成员code

            • 静态方法中不能够写this,super关键字对象

         

        • 实例变量、实例方法:

          • 实例变量、实例方法是对象的变量和方法,对象操做变量或方法也只是操做本身的变量或方法,不会影响其余对象。

         

        实例变量\方法跟静态变量\方法的区别比如:“泰迪狗类”好比有一个共有属性“狗种类名”,那么这个属性应该是全部泰迪狗都有的,而且是泰迪狗共享的,若是某一天人类想改泰迪狗的种类名称,那么应该是全部泰迪狗都改的(静态的);而每一只泰迪狗都有本身的主人,这是由每一只狗自身决定的,因此这是特有属性,即便这只狗换了主人,也不会影响别的狗。(实例的)blog

         

         

         


        构造函数:

        • 构造函数是类中的一种特殊函数,构造函数的名字与类的名字相同,并且没有类型。
        • 构造函数负责对类对象的特定属性初始化。【好比每一只狗对象都有不一样的名字,而狗类是一个模板,是没有名字的,而构造函数能够作到给狗定义名字。】
        • 类中能够有多个构造函数,它们以函数重载的方式存在。
        • 构造函数是没有类型的,是直接以“ 类名(){}” 做为函数。
        • 类中会默认有一个无参数的构造函数,若是定义了其余构造函数,那么这个默认的无参构造函数就会不默认存在了。

         

         

        
        class Dog{
            String name;
            Dog(){
                this.name="旺财";
            }
            Dog(String name){
                this.name=name;
            }
        }
        public class Init_usage {
        
            public static void main(String args[]) {
                
                Dog d3=new Dog();
                Dog d4=new Dog("小菜");
                System.out.println(d3.name);
                System.out.println(d4.name);
            }
        }

         

        补充:

        • 构造函数之间能够相互调用,但要防止递归调用。
          • image
          • image
          • 调用其余构造函数来实现初始化在有多个变量须要初始化的时候有明显的代码节省。

         

         

         

         


        封装与私有:

         

        • 类的封装的一个体现是变量和函数的私有化
        • 封装的准则:
          • 将不须要对外提供的内容都隐藏起来。
          • 将属性都隐藏,提供公共方法对其访问。
        • 私有化使类的非公共属性隐藏了起来,好比一个“人类”对象有本身的资产,通常只有本身才能知道本身有多少资产,而且不想直接给别人看到,但若是别人问题,仍是会告诉别人的(隐藏了本身的资产状况,可是本身可以使用方法得到结果,这个方法是开放的,调用就是至关于别人问)。
        • 可使用private来使变量和函数私有化,这样以后不能直接使用 对象.变量 或 对象.函数 来调用,只有对象内部的方法才能调用
        • 将变量或方法私有化以后,通常对外提供getXXX,setXXX方法进行访问,提升数据访问的安全性。

         

        
        class Man{
            private int money;
            String name;
            Man(String name,int money){
                this.name=name;
                this.money=money;
            }
            int getmoney(){
                return money;
            }
            void setMoney(int money){
                this.money=money;
            }
        
            
            
        }
        
        public class Private_usage {
        
            public static void main(String[] args) {
                Man m=new Man("lilei",2000);
                System.out.println(m.name);//lilei
        //        System.out.println(m.money);//报错的,由于私有了,不能访问
        //        System.out.println(m.wife);//报错的,由于私有了,不能访问
                System.out.println(m.getmoney()); //2000
                m.setMoney(6000);
                System.out.println(m.getmoney());//6000
        
            }
        
        }


        this关键字:

         

        • this表明当前对象(调用函数时表明当前调用该函数的对象),好比在类中可使用this.XXX来调用对象本身的变量或方法。
        • 当局部变量和成员变量同名时,能够用this关键字区分,this.XXX表明使用对象自身的变量
        • 类中的成员变量默认是带有this前缀的,但遇到同名时必须加以区分。

        • this加上参数列表(this(参数))的方式就是访问本类中符合该参数的构造函数

        • 用于调用构造函数的this语句必须放在第一行,由于初始化动做要优先执行

         

        class Person{
            String name;
            int age;
            Person(String name,int age){
                this.name=name;
                this.age=age;
            }
            void hello() {
                this.sysprint();
        //        sysprint();
            }
            void sysprint() {
                System.out.println("hello world!");
            }
        }
        
        public class This_usage {
            public static void main(String args[]) {
                Person p1=new Person("lilei",18);
                p1.hello();//hello world!
                
            }
        
        }
        相关文章
        相关标签/搜索