一 块 block { }
1.块的定义和执行
(1).{ }定义在方法中,局部代码块|普通语句块 执行时机:调用方法
(2).{ }定义在类中方法外,构造块 执行时机:创建对象
(3).static{ }定义在类中方法外,静态块 执行时机:类加载的时候
注意:构造块先于构造器执行,如果存在多个构造块,从上到下一次执行
静态块在第一次类加载的时候只初始化一次,先于main方法执行,如果存在多个静态块,从上到下一次执行
执行顺序: 静态块 --- main---构造块---构造器
二 继承
为什么使用继承? 为了提高类层面的代码复用。
如何使用继承? 子类 extends 父类
1.特点:
(1).子类继承了父类,就拥有了父类中所有的成员
(2).一个类可以多个子类,一个类只能继承一个类,单继承机制 ,可以多实现
(3).子类是父类的延续|扩展
父类|基类|超类: 被继承的类
子类|派生类: 继承其他类的类
2.继承的优点:
提高代码的复用性
单继承的优点: 简单
3.单继承的缺点:
不便于维护
开发原则: 开闭原则 对扩展开放,对修改关闭
4.继承链代码
(1)做题四大原则:
a.继承链:自己没有找父
b.编译看类型、确定方法,运行找对象
c.就近最优原则
d.父类引用对子类新增方法不可见
总结就是:考查重写和新增,new父类时只有父类的方法体,new父类但是子类体现时重写方法是可用的也是第一位的但是子类新增是对父类不可见的,new子类时父类的public方法是可见的也是第一位的
(2)代码:
public class PolyTest {
public static void main(String[] args) {
A a1=new A(); //A and D A and A
A a2=new B(); //多态 A and D B and A
B b =new B(); //B and B B and A A and D
C c=new C();
D d =new D();
System.out.println(a1.show(b));// A and A
System.out.println(a1.show(c));//A and A
System.out.println(a1.show(d));// A and D
System.out.println(a2.show(b));// B and A
System.out.println(a2.show(c));// B and A
System.out.println(a2.show(d));// A and D
System.out.println(b.show(b));// B and B
System.out.println(b.show(c));// B and B
System.out.println(b.show(d));// A and D
}
}
class A{
public String show(D obj){
return ("A and D");
}
public String show(A obj){
return ("A and A");
}
}
class B extends A{
public String show(B obj){
return ("B and B");
}
public String show(A obj){
return ("B and A");
}
}
class C extends B{
}
class D extends B{
}
三 垃圾回收机制
垃圾回收机制:jvm自动回收对象垃圾
1.System.gc()
通知作用,通知垃圾回收机制来回收垃圾,来不来什么的时候来回收不确定
2.finalize()
在回收垃圾的第一步调用finalize()方法,如果类中有自己定义,调用自己重写的,否则调用java给提供的
3.一定会调用finalize()方法的两种情况:
(1)对象无引用状态
(2)匿名对象
四 import
注意:不要定义与jdk相同的包,相同的类,否则会导致一些问题
1.不需要使用import的类
(1)同包下的类
(2)语言包 (java.lang)下的类
2.导入方式
(1)静态导入:
可以导入静态的内容
(2)模糊匹配:
不会降低运行效率,会降低编译效率
(3)使用其他外部类的引入方式:
a.import导包
b.写全名
java.util.Random ran1=new java.util.Random(); 只在当前行有效
五 private
解决安全隐患问题:介绍一个关键字 private 私有的
private 成员修饰符 ,只能修饰成员不能修饰局部
被private修饰的内容只能在本类中使用
公共的方法定义设置器与访问器
对外提供公共的访问方式 -> 设置器setter 访问器getter
操作:Shift+Alt+SèGanerate Getters and Setters…
六 封装
私有的属性并提供公共的访问方式是封装的一种体现
封装:封装内部具体的实现细节,对外提供公共的访问方式
面向对象的三大特性: 封装 继承 多态
私有是封装,封装不是私有
方法,类..都是封装的体现
1.封装的好处:
(1)提高代码的安全性
(2)提高代码的复用性
(3)隐藏实现细节,提供公共的访问方式
2.JavaBean
一系列类的统称,符合javabean编写要求的模板类
javaBean编码规则:
(1) javaBean必须声明为public class,这样才能够被外部所访问;
(2) 一个JavaBean中至少存在一个无参构造方法
(3)类中所有的属性都必须封装,即:使用private声明;
(4)为封装的私有属性提供公共的setter、getter方法;
七 权限修饰符
权限修饰符 : 访问对象中内容的权限范围大小
| 本类中 | 同包类 | 不同包子类(继承) | 所有类 |
private | √ |
|
|
|
default | √ | √ |
|
|
protected | √ | √ | √ |
|
public | √ | √ | √ | √ |
1.权限修饰符是成员修饰符,只能用来修饰成员,不能修饰局部
2.default修饰成员的时候只能隐式存在,因为是默认的,不能显示存在
3.只有public,default(隐式存在)能够修饰类
4.被public修饰的类在一个java文件中只能有一个,并且要求与文件名相同
5.被private修饰的内容不能被继承
6.构造器不能被继承
7.静态的内容可以被继承,只要权限够
子类继承父类,有能力使用父类中的成员,只要权限够.