首页 > 代码库 > [总结] 2016.12.6 星期二
[总结] 2016.12.6 星期二
类的高级概念
访问修饰符:类的每一个成员(包括成员变量,方法,和构造器)都有一个访问修饰符,用来判断谁可以访问
Java 中四种访问级别,权限由大到小排列:
1.公开访问级别:public
2.受保护访问级别:protected
3.默认访问级别:没有访问修饰符(可以叫做同包)
4.私有访问的级别:private
get/set方法的封装体现:
1.可以只提供get或者只提供set。把属性变为只读或只写
2.可以提供权限验证,set可以提供数据的有效验证。
3.可以隐藏内部的属性的存放形式
static :静态属性
当属性没有用static修饰的时候
1.语法上,该属性必须用对象进行访问
2.内存上,该属性是放在每个对象身上的(每个对象有一个name属性)
3.语义上,该属性是属于某个对象的
4.变量产生的时机,是在new对象的时候
5.根据语义分析,很少有变量是属性是static的
6.普通属性,非static属性
当属性使用static修饰的时候
1.语法上,虽然可以用对象进行访问,但更多的是类名直接访问
2.内存上,该属性是没有放在对象上的,而是存放在数据段的静态区,且全类共享一个值,一改全改。
3.语义上,该属性是跟类相关而跟对象无关的
4.变量产生的时机,是加载类的时候
5.常量属性可以不用考虑,直接设计成public static final
6.静态属性,类属性
static:静态方法
当没有使用static修饰的方法
1.语义上,必须使用对象进行调用
2.非静态的方法既可以操作静态属性又可以操作非静态属性,既可以调用静态方法,也可以调用非静态方法
3.加载上非static 的方法 被后加载
4.语义上,如果该方法与某个对象有关,就只能设计成非static的
5.设计上,如果该方法的实现部分需要操作跟对象有关的属性和其他方法,那么该方法设为非static
当用static修饰的方法
1.语法上,虽然可以用对象但更多的是用类名直接调用
2.静态方法只能操作静态属性,调用其他属性,甚至不能写this/super
3.在加载上static方法优先加载
4.语义上,如果某个方法与对象无关,只与类有关,才设计成static的
5.在设计上,如果该方法是工具的工具类方法。那么该方法应该设计成static
static 的共性:
1.凡是static 的都跟对象无关,都是类级别的、
2.凡是static的都在加载期会有特殊处理
初始化块
表现形式:{ 初始化块} --实列化初始化块
1.该代码块在new对象的构造的时候会被自动执行,new一次执行一次
2.new对象构造方法要执行4步,该代码块在3步之前执行,即在对属性进行初始化之前,因此先在初始化块中对属性进行赋值,会被第三步的赋值覆盖
static { 初始化 }静态初始化块
1.该代码块是在加载personBean的class的时候就被自动执行一个类只加载一次,所以静态的初始化块也只执行一次
2.所以很多打开资源,开启链接的预加载动作可以写到静态初始化块
内部类
在java中,还可以在类的内部定义类,这种在类的内部定义的类,称为内部类,内部类所在的类称为外部类
特点;独立的一个class文件
同样可产生对象
同样需要编译
多态
所谓多态:多种形态,OOP中多态是指一个对象有多种形式能力
一句话描述多态:相同的行为,不同的实现
分类
静态多态:在编译时方法实现的效果(方法重载可实现)
动态多态:编译时无法确定实现效果,运行时跟绑定对象实现效果(使用动态绑定和重写实现)
基本数据的转型:
1.自动类型转型,隐式转换,从小范围数据类型往大范围的数据类型转换,无风险,肯定成功
2.强制类型转换,显式转换,从大范围的数据类型往小范围的数据类型转换,有风险,丢失精度,无意义
引用数据类型的转换:--只有有继承关系的类才能使用类型转换
1.向上类型转换,自动类型转型,隐式转换,从小范围数据类型往大范围的数据类型转换,无风险,肯定成功,父类应用可以指向子类的对象
2.向下类型转换,强制类型转换,显式转换,从大范围的数据类型往小范围的数据类型转换,有风险,语法上不报错,可能会抛出异常,终止程序的运行
3.只有运行起来,确实是本类引用指向本类对象或父类引用指向子类对象才可以成功
[总结] 2016.12.6 星期二