Static关键字--静态的意思
常常用于修饰成员变量或者成员方法,代码块等,静态static的核心!!就是说明这个东西一开始就在这,归属于类,随着类的加载而加载,不需要实例化具体对象
1、Static修饰的成员变量
a、static修饰的变量属于整个类,在内存里就只存一份,被所有类成员共享。
b、这个变量不需要实例化对象就一直存在在那。所以在访问静态变量的时候,直接 ( 类名.xxx )的形式访问。
2、Static的修饰的成员方法
a、static修饰的方法属于整个类,静态方法在类加载的时候就一起放到方法区中,常用来实现一些共有功能。
b、同样,在访问静态方法的时候,直接 ( 类名.xxx )的形式访问。
3、static用在工具类,
a、定义一个类,里面全是静态方法,直接用类名调用这些共有的方法,供其他类使用,同时将工具类的构造器私有,因为用不着实例对象。
代码块--类中第四大部分
1、理解是什么,方便以后代码中看到能懂
a、代码块是和成员变量,方法,构造器同一级别的东西,同样归属于类,一般写在成员变量之后,方法之前。
b、写法就是直接写一个{}大括号,然后里面写一些代码。
2、一般有两种--static{}代码块和无static的{}代码块
a、static{}同样是归属于类,不需要实例化对象,在类加载时就直接执行,一般就常用于作静态资源的初始化。举了个例子,假设定义了一个类中有一个扑克牌成员变量,类型是ArrayList。那我们就可以定义一个static{}代码块,用于把这个扑克牌成员变量给填充了,就是把各种牌放进这个定义的扑克牌ArrayList中。
b、无static{}修饰的,就是只有在用构造器new一个对象的时候,才会跟着执行的代码块,不常用。
单例--可以理解为一种固定的写法模式
1、理解概念
a、用于保证类只能实例化一个对象,在某种需求下需要设计相应的代码实现。
2、怎么实现--饿汉单例和懒汉单例
--饿汉单例就是直接在类中定义static成员变量的时候就new出来一个对象
--懒汉单例就是在类中定义static成员变量的时候先不new,后面定义一个方法来new,同时判断对象是否已经存在,不存在才能new,否则就把原来的对象返回。
--注意在单例这种设计模式下构造器一定要私有!!!其余的区别就是那个唯一的对象是如何定义,在何时定义的问题了。
JAVA中的继承
1、理解概念和最重要的内存机制!!
a、定义的时候用extend来表明继承的关系,同时子类在定义对象的时候会开辟一对空间,因为子类中可能有一些父类的信息。
b、后面的一切的一些规则,什么可以什么不可以的核心其实就是理解这个内存关系!从这个内存中推理哪些可以访问可以哪些不可以。
2、继承里的一些访问规则
a、java是单继承,但是可以多层的继承,就近原则,同样的变量或方法,优先自己内部的,再到直接父类,再到父类的父类。java有一个究极大爹--object类,是所有类的最终的父类,什么equal和tostring这种方法就是属于object的,所以除了基本数据类型以外的所有类都可以调用!
b、子类是可以继承父类里的private的成员变量的,相当于子类也有同样的变量,只不过不能直接访问,要用相应的getter和setter的方法访问,从内存图那里理解。
c、但是!但是!父类的private的方法子类是无法直接访问的,是调用不了的,因为私有方法只有在类内部才可以用。虽然内存里也存了,但是由于访问规则限制,访问不了。
d、子类也可以直接访问父类里定义的一些static的变量成员,内存图理解,那个static的变量就放在父类那个空间里呢,当然可以访问。
--这些个访问规则通通可以用内存图来理解清楚
3、this,super关键字和其余一些继承后的特点
a、在子类中如果要访问大家都有的一些成员变量或者方法,访问的原则是就近原则,如果不指明的话。或者可以用this.和super.来指明要访问哪个类的变量和方法。
b、this和super除了用来指明引用的是子类还是父类以外,还可以用来调用,子类其他构造器或者父类构造器,下面有说。
c、方法的重写
--就是子类中重写父类的某个方法,要求方法名和参数列表全部一致,其他一些什么规则其实也不用太在意,就明白子类中有些行为和父类一样但是具体细节不同,所以要重写就行。
c、子类构造器的特点
--子类构造器在调用的时候会默认先调用父类的无参构造器,同样用那个内存图来理解。
--具体实现:子类构造器里会默认写一个super()来调用了父类的无参,所以其实可以手动调用父类的有参,就是在子类的有参里,第一行加上super(x,x)来先调用父类有参,为一些来自父类的成员变量幅值,再对自己独有的一些成员变量赋值。
--所以this(...)和super(...)分别代表的就是访问子类中其他兄弟构造器,和访问父类中的构造器。且这两个都必须放在构造器的第一行,所以不能同时存在。
权限修饰符
1、四种权限修饰符:作用范围从小到大(private->缺省->protected->public)
2、四种修饰符的作用域如下:
具体在定义时,一般参考如下:
final关键字--最终的意思
1、可以修饰--类、方法、变量,--类--不可被继承,--方法--不可被重写,--变量--第一次赋值后,不可被重新赋值。
2、对变量来说,分为两种情况,若修饰基本类型的变量,那么变量存储值不可改变,若修饰引用类型的变量,那么变量存储的地址不能变,但是内容是可以更改的。
3、常量!用public static final修饰的成员变量
枚举--一种特殊的类
1、枚举实例化在一开始就进行,且不能修改,
--相当于定义了一个类,这个类就固定几个实例对象--
2、枚举的具体实现方式,其编译后的代码如下:
抽象类--abstract修饰
1、用来作为父类给子类继承,子类必须重写全部的抽象方法,否则也必须定义成抽象类。
2、重写方法的时候,可以写一个@override,重写方法标志。
3、抽象类不能定义对象,只是用来给子类继承的。
接口--一种定义的规范
1、接口定义一种规范,用来被类实现,可以多实现
2、有人问那有内部类不久行了,要接口干嘛?接口的优势就是类可以实现多个接口。
3、同时接口和接口之间还可以多继承!
多态--面向对象最后一个特征
1、理解什么是多态就行,就是对象是父类的,但是方法是子类重写的。
2、对象还是定义成父类的,所以父类中没有的方法,子类独有的功能是不能调用的。
3、对象类型的转换--两种:
自动的类型转换(子赋给父)和强制的类型转换(父赋给子)
---instanceof关键字,用来判断对象的真实类型
内部类--类的五大成分中的最后一个
1、回顾一下类的五大成分:成员变量,成员方法,构造器,代码块,内部类
2、主要从定义上分为三种:
--静态内部类
--成员内部类
--私有内部类
看看书咯!
3、匿名内部类
一些常见的API--object、objects
1、object,所有类的大爹,toString方法就是object中的。
注意,在定义类的时候必须要重写toString方法,否则的话当你用sout输出对象的时候默认就是输出地址,而不是你想要的内容,这个object的toString方法就是让子类去重写适合自己的内容去进行输出的!
2、还有equals方法
3、还有一个objects这个是object的一个子类,里面提供了新的equals方法等