[Java]2.面向对象

来源:互联网 发布:苹果自动开关机软件 编辑:程序博客网 时间:2024/05/22 04:26


一、关于面向对象


面向对象对于编程而言是非常重要的思想,面向对象的思想在java中体现在抽象、封装上,多态则是其运用时的体现,面向对象最直接的好处在于增强了代码的复用,这是极为重要的。


编程当中,方法都应尽量依附对象和类。
static void sayHello() ;   // 该方法属于这个类
void  sayHello();             //该方法属于这个类的实例 
(变量同理)


java里面的参数传递机制:值传递
将实际参数的副本(复制品)传入方法内,参数本身不受影响。


形参可变的方法,下面的books为可变数组。
例如:public void test(int a, String... books)
相当于:public void test (int a, String[] books)


同个类中包含多个方法名相同,形参不同,称为重载(overload)
至于方法的其他部分如修饰符、返回值,跟重载没有任何关系
重载方法,调用此方法时会根据传入的形参决定调用的方法。


构造器是一个特殊的方法,用于创建实例时执行初始化
必须包含一个或者多个构造器
系统会默认提供一个无参的构造器




二、隐藏与封装


隐藏类的实现细节
让使用者只能通过预定的方法来访问状态信息,从而在该方法里面加入控制逻辑,限制对成员变量的不合理的访问
可进行数据检查,从而有利于保证对象信息的完整性


private:当前类访问
default:包访问
protected:子类访问




三、继承


JAVA类具有单继承特点,每个子类只有一个直接父类
继承父类使用extends关键字
定义一个类未显式声明,默认扩展java.lang.Object类
Object类是所有类的父类
implements关键字可以多实现接口
尽量不要在父类构造器中调用被子类重写的方法(空指针)


super:
用于调用父类被覆盖的实例方法,不能是静态方法(static)
用于调用父类的构造函数,例如 super(value1,value2)
用于调用父类的实例变量,例如 super.value




四、多态


Java引用变量有两类:编译时类型和运行时类型
编译时类型:由声明该变量时候用的类型决定
运行时类型:由实际赋值给该变量的对象决定


//编译类型为Object,实际类型是Integer
Object obj=new Integer(100);
if(obj instanceof String){
String str=(String)obj;
}




五、初始化块


{}包裹的代码
只能用static修饰或不修饰,静态的先执行然后从上到下




六、包装类


包装类的设计目的,是为了方便基础数据类型进行计算和转换的繁琐操作
基本数据类型不能当成Object类型变量来使用,只能使用包装类


byte——Byte
short——Short
int——Integer
long——Long
char——Character
float——Float
double——Double
boolean——Boolean


装箱:基本数据类型变量-->包装类对象
拆箱:包装类对象-->基本数据类型变量


Integer inObj=100;  //自动装箱
Object boolObj=true; //自动装箱
int it=inObj; //自动拆箱


字符串-->基本数据类型:
方法一:利用包装类里面的parseXxx(String s)的静态方法(Character无此方法)
方法二:利用包装类的Xxx(String s)构造器


基本数据类型-->字符串:
利用String.valueOf(val) 转换




七、Object类型基本方法:


对象描述:toString()
对象对比:equals()


== 和 equals方法:
==:基础数据类型中使用
equals(): 引用数据类型中使用




八、final修饰符:


final成员变量一旦有了初始值,就不能被重新赋值
如果不赋值,系统将会默认给它分配0、null或者false等值,毫无意义,也无法再次改变,所以必须显式初始化
final修饰的类不可以有子类


final变量-基本类型和引用类型区别:
基本类型:不能重复赋值
引用类型:它仅仅是保存一个引用,只保证引用地址不会改变即可,也就是说对象本身是可以改变的。
final int [] iArr={3,4,2,9,6};
数组内容可以一直改变




九、抽象类和接口


接口特点:
使用interface关键字进行修饰
接口支持多继承
public interface 接口名 extends 父接口1, 父接口2...
所有方法都是抽象方法(abstract)并且是使用public修饰的
接口里的成员变量默认使用public static final进行修饰
实现接口方法时,必须使用public访问控制符


抽象类和接口的区别:
抽象类可以有私有的方法和变量,接口的内容都必须是公有的。


抽象类和接口的共有特点:
有方法而无实现(方法体)方法都用abstract修饰




十、内部类


静态内部类:
只能访问外部类的静态方法


成员内部类:
可以访问外部类中的静态和非静态方法和成员变量
this.a调用内部类成员
OutClass.this.a调用外部类成员




局部内部类(方法内部类):
类似于局部变量,不能定义为public,protected,private或者static类型。
局部内部类只能访问final类型的变量
不能被直接创建,只能通过调用所在方法创建


匿名内部类:
匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。
匿名内部类会隐式地继承一个父类或实现一个接口。


内部类优点,内部类可以随意使用其外部类的变量和方法(不需要创建外部类对象),包括私有成员




十一、枚举类


SeasonEnum returnstring = Enum.valueOf(SeasonEnum.class,string)
valueof作用等价于toString


枚举类的方法:values可以获取每一个实例,用于遍历枚举类型


十二、GC(对象垃圾回收机制)


超出作用域或对象为null时回收
只回收对象
无法精确控制垃圾回收的运行
回收对象之前,都会先调用finalize()


对象在jvm堆区的三种状态:
可达状态
可恢复状态
不可达状态


只能控制对象何时不被引用(为NULL,不可达状态),不能控制回收时间


强制垃圾回收:System.gc和Runtime.getRuntime.gc可以提醒系统回收(后者更好)


System.runFinalization()马上执行finalize

0 0
原创粉丝点击