• 动手动脑第三波类与对象


    1.不是static类型则需要定义一个对象变量,然后“创建(new)”一个对象,赋值给对象变量,现在就可以通过对象变量使用对象,主要方式有:(1)直接调用类的方法;(2)存取类的字段。

    2.在定义变量时,Java要求必须显式初始化变量;对象变量如果不引用一个真实的对象,则必须声明为null。特殊值null:代表一个对象变量不引用任何对象

    引用对象后的对象变量:MyClass obj=new MyClass();

    3.可以使用final定义一个“常量”对象变量                final MyClass obj = new MyClass();

    注意:“常量”对象变量不能指向另一个对象,但可以修改对象,比如设置它所引用对象的某公有字段值。

    4.对于原始数据类型的变量(比如int),可以直接使用“==”判断两变量值是否相等

    5.当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等

    “==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。

    引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。

    6.两个对象的“内容”,其实是指它们在某一时刻的所有字段的值,“内容相等”,其实是就“对应字段值”一致。

    Java中要比对两个对象的字段值,可以 “重写(override)”基类的equals()方法

    7.当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。

    如果类没有定义构造函数,Java编译器在编译时会自动给它提供一个没有参数的“默认构造方法”

    8. 如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法

    执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

    执行类的构造函数。。

    优先调用有参构造方法,然后无参的话取决于初始化块和字段的初始值谁在前谁在后,先调用后面的那个。

    11.class Employee

    {

    String name;

    long salary;

    short employee_id;

    static int total_employee_id;

    ...

    }

    可以用对象名或类名作为前缀访问静态数据

    Employee newhire=new Employee();

    newhire.total_employees=1;

    Employee.total_employees=1;

    
    

    推荐使用类名来直接访问静态字段。

    12.静态初始化块只执行一次。

    创建子类型的对象时,也会导致父类型的静态初始化块的执行。

    13. 类的静态方法只能访问类的静态成员!

    14. 总结出静态初始化块的执行顺序
         总结:对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

    15. 静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

    只要定义一个类的对象在通过对象调用即可

    类中静态的方法或者属性,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中"寄居",不需要通过类的构造器(构造函数)类实现实例化;而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例对象存在。

    在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

    静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。

    package 课下测试;
    public class Static {
        static int x;//静态变量x
        int y;//实例变量y
        static public int getX() {
        return x;}
        static public void setX(int newX) {
        x = newX;}
        public int getY() {
        return y;
        }
        public void setY(int newY) {
        y = newY;
        }
        public static void main(String[] args) {
        System.out.println("静态变量x="+Static.getX());
        //System.out.println("实例变量y="+Static.getY());// 非法,编译时将出错
        //why
        Static a= new Static();
        Static b= new Static();
        a.setX(1);
        a.setY(2);
        b.setX(3);
        b.setY(4);
        System.out.println("静态变量a.x="+a.getX());
        System.out.println("实例变量a.y="+a.getY());
        System.out.println("静态变量b.x="+b.getX());
        System.out.println("实例变量b.y="+b.getY());
        }
    }
  • 相关阅读:
    软件工程课件
    团队博客作业Week1
    IntelliJ IDEA下Git的配置与使用(命令行下)
    Java语言程序设计课程学期总结
    JDBC访问数据库的一些小技巧
    Conference-Web Search and Data Mining
    线程停止与volatile
    班会-2016-2017第2学期
    Java第11次实验(JDBC数据库编程)
    Python-Jupyter Notebook使用技巧
  • 原文地址:https://www.cnblogs.com/zzstdruan1707-4/p/9824424.html
Copyright © 2020-2023  润新知