#码神心得_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();}}

运行截图:


0 0
原创粉丝点击