java基础笔记(2)

java中成员变量是有默认初始值的,而局部变量是没有的;

构造方法名和类名相同,没有返回值,即结构如下:public 构造方法名();

实例化类的本质就是调用了类的构造方法;

如果自定义了构造方法,就不会调用默认的构造方法了,即便你自己自定义的方法是有参数,而实例化时没带参数,它也不会去调用默认的无参构造方法,而是提示错误;同样的,构造方法也可以重载,实例化时根据赋予的参数对应选择;

每个类都可以实例化多个对象,每个对象都有自己的成员,相互独立,而static修饰的成员为静态成员或类成员,即它属于整个类所有,而不是特定的某个对象;访问时可以使用对象和类名进行访问,鉴于它的作用更加推荐是使用类名;

同样的,static也可以用来修饰方法,且被static修饰的方法可以之间调用同类中的static属性或方法,而要调用非static属性或方法时,需要通过对象名来实现;

而普通方法是可以直接调用同类的属性;

在类的声明中,可以存在多个初始化块,如果有static修饰则表示为静态初始化块,和普通的区别就是普通的初始化块在实例化成对象时都会进行一次初始化,而静态初始化块只会进行一次初始化,且在第一次执行顺序上是先执行静态初始化块然后再初始化块最后才是构造函数;

访问控制符:

private:同类

没声明:同类、同包

protected:同类、同包、子包

public:全部

内部类:内部类可以使用外部类的方法和变量,即使该变量的访问控制符是private,而外部类不能直接使用内部类的方法和变量,而要通过实例化对象;

内部类的实例化对象也不能直接去new一个内部类对象,而应该想外部类类型 变量名 = new 外部类名()后,再通过 内部类类型 变量名2 = 变量名.new 内部类名()实现;

如内外部类有相同的变量名,内部类默认调用的是自身的变量,如要调用外部类的同名变量,需使用外部名.this.变量名来实现调用;

静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 ;

如内外部类有相同的变量名,内部类默认调用的是自身的变量,如要调用外部类的同名变量,需使用外部名.变量名来实现调用;

静态内部类的实例化可直接通过:内部类 对象名= new 内部类()来实现;

方法内部类:定义在方法里的内部类,不能在方法以外的地方使用,因此是不需要访问控制符合static修饰符的;

可以在方法内实例化对象,通过正常的内部类 对象名= new 内部类()来实现;

继承的初始化顺序:先初始化父类对象,后再初始化子类对象,而在对象内,是先初始化属性,后再初始化构造方法里面的属性;

final关键字:类不能被继承,方法不能被覆盖、重写,属性的值不能被修改,且声明时没被赋值时会报错,即等同于常量;

子类的构造方法会隐式地存在super()这个方法,即在实现子类的构造方法时会先实现父类的构造方法;

如果子类没有显式的父类构造方法,而父类又没有无参的构造方法,则编译会错;

子类可以通过super.xxx来调用父类的属性或方法 ;

Object类:所有类的父类,没有标明继承哪个类的类,其父类默认就是object类;

object类里面的toString()方法:当我们直接输出某个对象时,会自动调用改方法,返回的是对象在内存的地址,如需求是要返回对象的属性及方法,则需要重写toString()方法;

equals()方法:比较对象的引用是否相同,即判断是否指向同一块内存地址;在实例化对象时,其实就是把对象存在的内存地址赋给了某个变量名,通过变量名找到该对象地址,进而操控对象;即实例化两个对象通过equals来比较,其结果是不相等的,因为其内存地址是不一样的;可以通过重写equals来使得其比较的是两个对象的属性、属性值是否相等;

与==符号的区别是,==可以表示判断基本数据类型是否相等,而对于引用对象类型同样也是判断内存地址,而equals是不可以用来判断基本数据类型的,在没重写时比较的也是其内存地址是否一样;

引用多态:父类的引用可以指向本类以及子类的对象

方法多态:当父类引用子类时,如果子类有重写父类的方法,那么是可以调用到子类的方法的,当然,如果是父类本身就没有的方法,那么就没法调用子类独有的方法了;

向上向下类型转换,向上没问题,向下需强制,且需判断是否类型属于包含关系,可通过instanceof进行判断;看下面例子帮助理解:

Dog和Cat是Animal的子类;

抽象类:abstract定义抽象类;用来约束子类,父类只需表明方法即可,无需实现,即可以没有方法体,抽象方法没有方法体时以分号做结尾;子类是需要重写实现父类定义的方法;

如果有的方法有abstract修饰符,那么该方法所在的类是一定也要有abstract修饰符的;

注意类添加abstract修饰符的 顺序为 abstract class;

接口:定义了某一批类所要遵循的规范,规定这类类必需提供的方法;因此接口的属性是常量,即默认添加public static final修饰符,方法默认添加public abstract修饰符

 

 接口的引用:可以通过指向实现接口的对象引用接口,也可以直接new 接口名(){方法}.方法来引用接口(匿名内部类),如:

SmartPhone类实现了IPlayGame接口,并定义了palyGame()方法:

 匿名内部类:

猜你喜欢

转载自www.cnblogs.com/lzj-learn/p/11772873.html