Java基础总结6--面向对象2
2016-09-05 10:44
447 查看
Java接口
系统自动为接口里定义的成员变量增加 public static final 修饰符
int MAX_SIZE = 50;== public static final int MAX_SIZE = 50;
接口里定义的成员变量只能是常量
接口里定义的普通方法只能是public的抽象方法
比如 void out();
接口里定义的默认方法需要使用default修饰
default void print(String msgs){
for(String msg :msgs){
system.out.println(msg);
}
}
接口里定义的类方法需要使用static修饰
static String staticTest(){
return “接口里的类方法”;
}
一个类可以继承一个父类,并同时实现多个接口,implements部分必须放在extends部分之后。
一个接口可以继承多个接口
实现接口方法时,必须使用public 访问控制符,因为接口里的方法都是public的,而子类(相当于实现类)重写父类方法时访问权限只能更大或者相等,所以实现接口里的方法时只能使用public 访问权限。
接口和抽象类区别:
接口里只能包含抽象方法和默认方法,不能为普通方法提供方法实现;抽象类则完全可以包含普通方法。
接口里不能定义静态方法,抽象类则可以定义静态方法
接口里只能定义静态变量,不能定义普通成员变量,而抽象类既可以定义静态变量,也可以定义普通成员变量
接口里不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成抽象类的初始化操作。
接口里不包含初始化块,而抽象类则包含初始化块。
一个类最多只能有一个父类,包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承的不足。
Java 8 新增的Lambda表达式
Lambda 表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例。
使用匿名内部类
public class CommandTest{
public static void main(String args){
ProcessArray pa = new ProcessArray();
int【】target = {3,-4,6,4};
//处理数组,具体处理行为取决于匿名内部类
pa.process( target , new Command(){
public void process(int [ ] target ){
int sum = 0;
for( int tmp : target){
sum += tmp;
}
system.out.println("数组元素的总和是:" + sum);
}
});
}
}
public class CommandTest2{
public static void main(String args){
ProcessArray pa = new ProcessArray();
int【】target = {3,-4,6,4};
//处理数组,具体处理行为取决于匿名内部类
pa.process( target , (int [ ] target ) -> {
int sum = 0;
for( int tmp : target){
sum += tmp;
}
system.out.println("数组元素的总和是:" + sum);
});
}
}
从上面的表达式可以看出Lambda 表达式的主要作用就是代替匿名内部类的烦琐语法。
它由三部分组成
1、行参列表 行参列表允许省略形参类型,如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
2、箭头(->)。必须通过英文中画线号 和大于号组成。
3、代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号。
垃圾回收具有如下特征
垃圾回收机制 只负责回收内存中的对象,不会回收任何物理资源(例如数据库连接,网络IO等资源)
程序无法精确的控制垃圾回收的运行,垃圾回收会在合适的时候进行,当对象永久性的失去引用后,系统就会在合适的时候回收它所占用的内存。
在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新复活,从而导致垃圾回收机制取消回收。
程序无法精准控制Java垃圾回收的时机,但依然可以进行强制系统进行垃圾回收---这种强制只是通知系统进行垃圾回收,但系统是否进行回收依然不确定。大部分时候,程序强制系统垃圾回收后总会有一些效果,强制系统垃圾回收有如下两种方式。
1、调用System类的gc()静态方法:System.gc();
2、调用Runtime 对象的gc()实例方法:Runtime.getRuntime().gc()。
finalize() 方法具有如下4个特点。
1、永远不要主动调用某个对象的finalize() 方法,该方法应交给垃圾回收机制调用。
2、finalize() 方法何时被调用,是否调用具有不确定性,不要把finalize()方法当成一定会被执行的方法。
3、当JVM执行可恢复对象的finalize()方法时,可能使该对象或者系统中的其他对象重新变成可达状态。
4、当JVM执行finalize()方法出现异常时,垃圾回收机制不会报告异常,程序继续执行。
系统自动为接口里定义的成员变量增加 public static final 修饰符
int MAX_SIZE = 50;== public static final int MAX_SIZE = 50;
接口里定义的成员变量只能是常量
接口里定义的普通方法只能是public的抽象方法
比如 void out();
接口里定义的默认方法需要使用default修饰
default void print(String msgs){
for(String msg :msgs){
system.out.println(msg);
}
}
接口里定义的类方法需要使用static修饰
static String staticTest(){
return “接口里的类方法”;
}
一个类可以继承一个父类,并同时实现多个接口,implements部分必须放在extends部分之后。
一个接口可以继承多个接口
实现接口方法时,必须使用public 访问控制符,因为接口里的方法都是public的,而子类(相当于实现类)重写父类方法时访问权限只能更大或者相等,所以实现接口里的方法时只能使用public 访问权限。
接口和抽象类区别:
接口里只能包含抽象方法和默认方法,不能为普通方法提供方法实现;抽象类则完全可以包含普通方法。
接口里不能定义静态方法,抽象类则可以定义静态方法
接口里只能定义静态变量,不能定义普通成员变量,而抽象类既可以定义静态变量,也可以定义普通成员变量
接口里不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成抽象类的初始化操作。
接口里不包含初始化块,而抽象类则包含初始化块。
一个类最多只能有一个父类,包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承的不足。
Java 8 新增的Lambda表达式
Lambda 表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例。
使用匿名内部类
public class CommandTest{
public static void main(String args){
ProcessArray pa = new ProcessArray();
int【】target = {3,-4,6,4};
//处理数组,具体处理行为取决于匿名内部类
pa.process( target , new Command(){
public void process(int [ ] target ){
int sum = 0;
for( int tmp : target){
sum += tmp;
}
system.out.println("数组元素的总和是:" + sum);
}
});
}
}
public class CommandTest2{
public static void main(String args){
ProcessArray pa = new ProcessArray();
int【】target = {3,-4,6,4};
//处理数组,具体处理行为取决于匿名内部类
pa.process( target , (int [ ] target ) -> {
int sum = 0;
for( int tmp : target){
sum += tmp;
}
system.out.println("数组元素的总和是:" + sum);
});
}
}
从上面的表达式可以看出Lambda 表达式的主要作用就是代替匿名内部类的烦琐语法。
它由三部分组成
1、行参列表 行参列表允许省略形参类型,如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
2、箭头(->)。必须通过英文中画线号 和大于号组成。
3、代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号。
垃圾回收具有如下特征
垃圾回收机制 只负责回收内存中的对象,不会回收任何物理资源(例如数据库连接,网络IO等资源)
程序无法精确的控制垃圾回收的运行,垃圾回收会在合适的时候进行,当对象永久性的失去引用后,系统就会在合适的时候回收它所占用的内存。
在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新复活,从而导致垃圾回收机制取消回收。
程序无法精准控制Java垃圾回收的时机,但依然可以进行强制系统进行垃圾回收---这种强制只是通知系统进行垃圾回收,但系统是否进行回收依然不确定。大部分时候,程序强制系统垃圾回收后总会有一些效果,强制系统垃圾回收有如下两种方式。
1、调用System类的gc()静态方法:System.gc();
2、调用Runtime 对象的gc()实例方法:Runtime.getRuntime().gc()。
finalize() 方法具有如下4个特点。
1、永远不要主动调用某个对象的finalize() 方法,该方法应交给垃圾回收机制调用。
2、finalize() 方法何时被调用,是否调用具有不确定性,不要把finalize()方法当成一定会被执行的方法。
3、当JVM执行可恢复对象的finalize()方法时,可能使该对象或者系统中的其他对象重新变成可达状态。
4、当JVM执行finalize()方法出现异常时,垃圾回收机制不会报告异常,程序继续执行。
相关文章推荐
- spring源码研究之路_IOC
- Java--笔记(1)
- java多态
- java程序的初始化顺序以及作用域
- Java开源中文分词器的使用方法和分词效果对比
- Exception in thread "main" java.lang.IllegalArgumentException: Argument cannot be null
- 下列关于Java并发的说法中正确的是()牛客网
- java多态继承中需要特别注意的点
- JAVA001对象导论05
- 以下关于java封装的描述中,正确的是:(牛客网)
- Java 并发编程深入学习(五)——死锁
- java 获取系统信息
- Hibernate 下载、安装和使用
- java enum(枚举)使用详解 + 总结
- Q10--链表中倒数第k个结点
- Springmvc 使用 AbstractExcelView 导出excel
- eclipse使用技巧
- java小结
- JAVA BEAN
- spring ioc(Inversion of Control) 和 Aop 总结