1.关键字Static
static 有三个特点,这边先阐述一下,后面代码也会展示
- static 可以修饰方法(静态方法)、成员变量(静态变量),修饰不了类请注意!
- 随着类的加载而加载,优先于对象存在,说人话就是不new 对象也可以使用!
- 被所有这个类共享。直接看代码
public class study {
public static void main(String[] args) {
//tom 这个对象我将名字输入
Student Tom = new Student();
Tom.name = "汤姆";
Tom.callMe();
Student Lilei = new Student();
//Lilei 这个对象我将名字输入
Lilei.name = "李磊";
//调用tom 里的方法,你看变成了李磊,所以这个特性是取决于static能否使用的关键!
Tom.callMe();
}
}
//内部类
class Student {
public static String name;
public void callMe(){
System.out.println("我叫"+name);
}
}
这边需要说的是,静态变量在堆内存中自己开辟了一块内存进行存储,所有对象都是引用静态内存中的变量,这句话有点抽象,不理解也行!
静态方法的特点 :静态方法中只能访问静态成员,静态方法里面没有this关键字!至于为什么访问不到呢,总结来就是说我在的时候你没在,我怎么给你一巴掌。
(1.12~1.13)
2.继承相关特点
子类可以使用父类非私有的成员!总结就是能用父类让我用的方法。
当然子类只有一个生父!只能单继承,但是可以套娃。
这样做的好处呢,就是代码的复用性、以及可维护性。
但是有利有弊
继承的弊端是
- 1.继承是侵入性的,你不要也得要!
- 2.降低了代码的灵活性,就是多了一些父类带来的约束
- 3.增强了代码的耦合性,父类要是改错一个东西,那么所有子类都会报错!
2.1 子父类拥有相同属性时的特点
就近原则,直接贴代码,便于理解。
3.super和this的用法
这边有个注意的就是,如果this想要访问本类的对象没有的话,还是会访问父类的对象。
(2.01~2.06)
3.1 继承中构造方法的访问特点
子类的所有构造方法都会先访问父类的无参构造
为什么这么设计,就是子类初始化的时候可能要用到父类里面的成员变量,如果不初始化父类那么就用不了父类里面的东西。这么顺带要提一嘴就是所有对象都继承了Object这个对象。
//子类继承父类
class YaSuo extends Hero{
private String age;
public YaSuo() {
//这语句只能在构造方法的第一行
super();
System.out.println("我是子类的无参构造");
}
public YaSuo(String name, String age) {
super();
System.out.println("我是子类的带参构造");
this.age = age;
}
}
上面说了子类都会访问父类的无参构造,如果父类没有无参构造的话,那么子类就会报错,解决方式就是子类的构造方法第一行必须访问父类的有参构造。
第二种不太合规的解决方式,其实也是可以解决的
这种方式有个注意点需要强调一下,this(...)与super(...)是不能在一个构造方法里面同时出现,因为这个两个方法必须在构造方法的第一行。
4.重写与重载
重写 :在继承体系中,子类出现了与父类一模一样的方法声明(方法名、参数类型、返回值类型)
重载:在同一个类中 ,出现方法名相同、参数列表相同。(与返回值没有关系)
4.1 重写方法的注意事项
@Override 同学们发现这个注解加与不加,实际上对逻辑没有什么说法,这个注解实际上就起了一个校验的作用。
- 如果父类的方法不是静态方法,子类重写的时候也不能将该方法变成静态方法。
- 子类的访问权限必须大于父类,父类是public 子类是默认的修饰符肯定是不行的。
- 父类的静态方法不能被重写。(实际上可以通过不加注解的方式实现重写的效果,但实际上不是重写)这个最后会贴个图看下效果
5.权限修饰符
这个也是我们开发中比较容易忽略的知识点
private | 只能在本类里面访问,在其他类里面没有办法访问到,子类也访问不到 |
public | 随便在哪里都可以访问 |
默认修饰符 | 默认修饰只能在一个包里面访问 |
protected | 只能和子类能访问不管在不在一个包里面 |
6.抽象类
抽象类特点
- 抽象方法只能存在与抽象类中,抽象类里面不仅仅只有抽象方法。出了红色的限制,抽象类和普通的类没什么差别。
- 抽象类不能实例化,如果可以实例化那么就可以调用抽象方法了,没有意义,所以肯定是不能调用的。
- 可以有构造方法、成员变量,这个第三点也可以这么理解,抽象类与普通的类其实没什么两样,抽象类特殊点,或者说功能多了个抽象方法,除了不能实例化。
- 子类继承抽象类,必须实现抽象方法,如果不想实现,那么子类也可以搞成一个抽象方法(不推荐)
(2.07~2.15)
6.1 模板设计模式
设计模式其实就是经验。不同的设计模式都会有不同的优点。
7.final关键字
final 关键字可以修饰方法、修饰变量、修饰类
- 修饰类的时候不能被继承
- 修饰方法的时候不能被重写
- 修饰变量的时候不能被修改
8.代码块
- 局部代码块,是类中方法定义的,可以控制变量的生命周期代码块里的内容执行过后就会立马释放内存。提高内存的使用效率
- 构造代码块,写在类中方法外,这种代码块就是每次调用构造方法都会执行一次!
- 静态代码块,在加载该类的字节码文件的时候有且只会加载一次,之后都不会加载。
同学们可以看下下面的代码,这样理解起来会比较简单。
9.接口
接口可以单实现,也可以多实现,说人话就是可以实现一个接口还是多个接口,如果接口里面有相同的方法也不影响,如果一个类实现了接口,要么就实现接口的所有方法,要么就让这个类变为抽象类
- 接口也是不能实例化的
- 成员变量前缀默认 带有 public static final,接口没有构造方法,成员方法前面默认是 public abstract
9.1 jdk1.8中的新特性
9.1.1 default 关键字
允许在接口中定义带有方法体的方法,但是要加上default 关键字,默认方法子类可以不重写,但是也可以重写。
有个注意事项就是如果两个接口里面都有相同的default方法,那么实现类就必须实现这个方法。
9.1.2 接口 static 方法
jdk1.8 之后接口中可以定义static 的方法,但是该方法只能通过接口名调用,不能通过实现类调用
9.2 jdk1.9中的新特性
接口中允许接口中有私有方法private,idk1.9之前都是public 修饰的
(3.08)