Dev_Nick

导航

面向对象编程-类和对象

程序界的至理名言:万物皆对象
类:同一种类型的事物公共属性和行为的抽取。
类的定义:
    class 类名{

        事物的公共属性;

        事物的公共行为;
    }

对象:真实存在的唯一事物。
对象的种类:
    普通对象:有引用类型指向的对象。
    匿名对象;
创建格式:
    普通对象通过类创建对象的格式:
        类名 对象名 = new 类名();
    匿名对象创建格式:
        类名();
匿名对象要注意的事项:
    1、一般不会给匿名对象赋予初始值,因为永远无法获取到。
    2、匿名对象永远都不可能是同一个对象。
匿名对象使用场景:
    1、如果一个对象需要调用一个方法一次的时候,而调用完这个方法之后,该对象就不在使用,这时可以使用匿名对象。
    2、可以作为一个函数的实参。
匿名对象的好处: 简化书写。

构造函数
作用:给对应的对象进行初始化。
格式:
    修饰符 类名(形式参数){
        函数体……;
    }
注意细节:
    1、构造函数没有返回值。
    2、构造函数函数名必须与类名一致。
    3、构造函数并不是由手动调用,而是在创建对象的时候,jvm自动调用的。
    4、如果一个类没有显示的写上一个构造方法,那么java编译器会为此类添加一个无参的构造方法。
    5、如果一个类已经显示的写上了一个构造方法,那么java编译器不会为此类添加一个无参的构造方法。
    6、构造方法在一个类中可以以函数重载的形式存在多个。
构造函数和普通函数的区别:
    1、返回值类型的区别:
        (1)构造函数没有返回值类型。
        (2)普通函数有返回值类型,即使函数没有返回值,函数的返回值类型也要写上void。
    2、函数名的区别:
        (1)构造函数的函数名必须与类名一致。
        (2)普通函数的函数名只要符合标识符的命名规范即可。
    3、调用方式的区别:
        (1)构造函数是在创建对象的时候jvm自动调用。
        (2)普通函数是由使用对象调用的,一个对象可以多次调用普通函数。
    4、作用上的区别:
        (1)构造函数用于初始化一个对象。
        (2)普通函数用来描述一类事物的公共行为。

构造代码块
作用:给对象进行统一的初始化。
格式:
    {
        语句;
    }
位置:构造代码块必须位于成员位置(方法以外,类之内)上。
构造代码块的注意事项:
    1、java编译器编译一个java源文件的时候,会把成员变量的声明提前至一个类的最前端。
    2、成员变量的初始化工作其实是在构造函数中执行的。
    3、一旦进过java编译器编译后,那么构造代码块的代码会被移动到构造函数中执行且是在最前面执行,构造函数中的代码是在最后执行的。
    4、成员变量的显示初始化与构造代码块的的代码是按当前代码的顺序执行的。
代码块的种类:
    1、构造代码块。
    2、局部代码块。大括号位于方法之内。作用:缩短局部变量的生命周期,节省一点点内存。
    3、静态代码块。 static修饰的。

访问对象的属性或者调用对象的行为。
1、访问对象属性的格式:
    对象.属性名;
2、设置对象的属性:
    对象.属性名 = 数据;
3、访问对象的行为:
    对象.函数名();

this关键字
this关键字代表了所属函数的调用者对象。
this关键字的作用:
    1、如果存在同名的成员变量与局部变量时,在方法内部默认方位局部变量的数据,可以通过this关键字指定访问成员变量的数据。
    2、在一个构造函数中可以调用另一个构造函数初始化对象。
       this关键字调用其他构造函数的注意事项:
        (1)this关键字调用其他的构造函数时,this关键字必须要位于构造函数中的第一个语句。
        (2)this关键字在构造函数中不能出现相互调用的性情况,因为是死循环。
this关键字注意事项:
    1、存在同名的成员变量和局部变量时,在方法的内部访问的是局部变量(java采用的是“就近原则”的机制访问的)。
    2、如果在一个方法中访问了一个变量,该变量只存在成员变量的情况下,那么java编译器会在该变量的前面默认添加this关键字。

代买示例如下:
class Car{
    String name;
    String color;
    int wheel;
    public void run(){
        System.out.println(name + "使用" + wheel + "个轮子" + "飞快的跑起来了!!!");
    }

    public void discard(){
        System.out.println("因不合格直接报废处理!!!!");
    }
}

class Baby{
    int id;
    String name;
    String color = "白色";
    //构造代码块
    {
        color = "黄色";
        System.out.println("我是有血有肉的……");
    }
    //有参构造方法
    public Baby(int id, String name){
        this(); //调用无参构造方法初始化肤色
        this.id = id;
        this.name = name;
        System.out.println("Baby的属性初始化完毕");
    }
    //无参构造方法
    public Baby(){
        color = "黑色";
        System.out.println("无参的构造方法被调用了");
    }
    //普通方法
    public void cry(){
        System.out.println(name + "哇哇哭……");
    }

}

class Demo{
    public static void main(String[] args){
        //对象的创建
        Car car = new Car();
        //设置属性值
        car.name = "宝马";
        car.color = "蓝色";
        car.wheel = 4;
        //调用属性
        System.out.println("名字:" + car.name +"        "+"颜色:" + car.color);
        //调用方法
        car.run();

        //匿名对象调用方法
        new Car().discard();
        //匿名对象作为函数的实参
        System.out.println(new Car() == new Car());

        //初始化一个白户(出生的时候就有Id和name)
        Baby boy = new Baby(123,"小明");
        boy.cry();
        System.out.println("新生儿的肤色" + boy.color);
        Baby girl = new Baby();
        girl.cry();
        System.out.println("新生儿的肤色" + girl.color);
    }
}




posted on 2016-10-31 22:57  Dev_Nick  阅读(285)  评论(0编辑  收藏  举报