#码神心得_10# 接口、内部类、枚举类、垃圾回收机制
来源:互联网 发布:淘宝 作弊 编辑:程序博客网 时间:2024/06/07 02:25
今天android班又来了两位新同学,11人已经可以创建一支足球队了。加油,we are a team!!
接口、内部类、枚举类、垃圾回收机制
一、接口
1、接口:interface,支持多继承
2、接口内的方法或变量只能用public修饰符修饰,若没有修饰符,则默认为public
3、接口类的命名方式一般首字母“I”
4、接口与抽象类的区别:前者完全抽象,后者部分抽象
5、接口的好处:
①“接口是一种规范”,能够达到统一访问。
②“接口”能让人清晰的知道接口的功能,而不需要知道其具体的实现
③“接口”和实现分离,对分工协作有很大的帮助
二、内部类
1、定义:一个类定义在另一个类的内部,则这个类为内部类
2、一般内部类:可以直接调用外部类的实例变量和实例方法
3、静态内部类:只能调用外部类的静态变量与方法
4、方法内部类:即声明在方法体中的类。方法内部类只在方法体中有效
5、匿名内部类:一般只需要用一次的类,可以把它设置为匿名内部类,可以减少代码量
//定义一个接口interface Human{abstract void walk();}
public class NoNameClass {public static void main(String[] args) {//匿名内部类实现了Human接口new Human() {@Overridepublic void walk() {System.out.println("行走");}};}}
三、枚举类
1、枚举类与普通类的区别:枚举类继承至java.lang.Enum类,而普通类都继承至Object类
2、枚举类规范了参数的形式,这样可以不用考虑类型的不匹配并且显式的替代了int型参数可能带来的模糊概念
3、枚举类可以提高程序的阅读性
枚举类:
public enum SeasonEnum {//列出4个枚举实例SPRING,SUMER,FALL,WINTER;}
测试类:
public class RoleTest {public static void main(String[] args) {System.out.println("请输入角色:");Scanner scanner = new Scanner(System.in);String string = scanner.next();try { //表示取Role枚举类中值为FEMALE的对象。 Role roleTest = Enum.valueOf(Role.class,string);switch (roleTest) {case USER:System.out.println("用户");Role.USER.print();break;case PM:System.out.println("项目经理");break;case DISIGNER:System.out.println("设计师");break;case CODER:System.out.println("程序员");break;}} catch (Exception e) {e.printStackTrace();}}}
四、垃圾回收机制GC
1、当对象的内存不在被调用时,将等待GC回收
2、GC只负责回收对象
3、程序无法精确控制垃圾回收机制的运行
4、在回收任何对象之前,都会先调用finalize()方法
5、对象在jvm的三种不同的状态:①可达 ②可恢复 ③不可达
6、强制垃圾回收方法:
①System.gc();//操作系统层面,较随机的
②Runtime.getRuntime().gc();//当前程序层面的,较稳定,推荐使用
课堂作业
场景:一个系统的数据库是可以随时切换的,目前支持连接MySql和SqlServer,甚至以后还有可能连接Oracle数据库
要求:利用抽象模版的思想和接口规范的思想实现以上场景
提示:数据库操作过程包含链接(connect),查询(query),释放(dispose),具体细节不用实现,体现思路即可。
具体思路:数据库Dao设计模式
①定义接口IDao
②分别通过实现该接口具体实现MySql和SqlServer数据库操作
③创建一个能够获取当前数据库类型的类DaoFactory
④通过调用DaoFactory,实现具体的数据库操作DBImpl类
代码如下:
//数据库操作接口public interface IDao {//数据库连接abstract void connect();//数据库查询abstract void query();//关闭数据库abstract void dispose();}
//MySql数据库实现public class MySqlImpl implements IDao {@Overridepublic void connect() {System.out.println("MySql数据库连接");}@Overridepublic void query() {System.out.println("MySql数据库查询");}@Overridepublic void dispose() {System.out.println("MySql关闭数据库");}}
//SqlServer数据库实现public class SqlServerImpl implements IDao {@Overridepublic void connect() {System.out.println("SqlServer数据库连接");}@Overridepublic void query() {System.out.println("SqlServer数据库查询");}@Overridepublic void dispose() {System.out.println("SqlServer关闭数据库");}}
//获取数据库类型的类public class DaoFactory {private static String dbName = "MySql";public static IDao getDBName() {if (dbName.equals("MySql")) {return new MySqlImpl();} else if (dbName.equals("SqlServer")) {return new SqlServerImpl();} else {return null;}}}
//数据库操作类public class DBImpl implements IDao {IDao db = DaoFactory.getDBName();@Overridepublic void connect() {db.connect();}@Overridepublic void query(){db.query();}@Overridepublic void dispose() {db.dispose();}public static void main(String[] args) {DBImpl dbImpl = new DBImpl();dbImpl.connect();dbImpl.query();dbImpl.dispose();}}
运行截图:
- #码神心得_10# 接口、内部类、枚举类、垃圾回收机制
- 接口 内部类 垃圾回收机制
- 接口,内部类,垃圾回收机制
- JASE总结--09(1.抽象类2.接口3.Debug4.垃圾回收机制5.内部类6.方法内部类7.静态内部类)
- 为什么用内部类,java的垃圾回收机制
- 内部类 及垃圾回收
- 接口、内部类、枚举类、gc
- 接口 垃圾回收机制(GC)
- 关于匿名内部类的垃圾回收
- 24-python_内部类-构造函数与析构函数-垃圾回收机制
- 内部类(成员、静态、方法)| java帮助文档 | 垃圾回收机制
- Java面向对象(七)包、内部类、垃圾回收机制
- 枚举类、内部类
- Java SE 自学笔记9 之 抽象类、接口、内部类、匿名内部类、枚举
- java第八章(4)内部类与匿名类,包,java的垃圾回收
- JAVA基础之--Lambda表达式,枚举类,垃圾回收机制,修饰符的使用范围
- java心得---内部类、匿名类、静态内部类
- 接口、抽象类、内部类
- Lua中table类型源码分析
- HBase rest API - GET、PUT/POST、的使用
- JAVA字符串为什么设计成不可变对象?
- uva 1626 Brackets sequence
- Oracle exists的使用
- #码神心得_10# 接口、内部类、枚举类、垃圾回收机制
- Word Ladder
- 国外机器学习牛人 慢慢总结慢慢写
- 远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
- 感知器-----preceptron
- java Web表示层技术
- Handler机制源码分析(异步一)
- python---之jinjia2
- 来!我们来玩一下陀螺仪和加速度计