#码神心得_10# 接口、内部类、枚举类、垃圾回收机制

        今天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() {		
			@Override
			public 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 {

	@Override
	public void connect() {
		System.out.println("MySql数据库连接");
	}

	@Override
	public void query() {
		System.out.println("MySql数据库查询");

	}

	@Override
	public void dispose() {
		System.out.println("MySql关闭数据库");

	}

}

//SqlServer数据库实现
public class SqlServerImpl implements IDao {

	@Override
	public void connect() {
		System.out.println("SqlServer数据库连接");

	}

	@Override
	public void query() {
		System.out.println("SqlServer数据库查询");

	}

	@Override
	public 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();
	@Override
	public void connect() {
		db.connect();
		
	}
	
	@Override
	public void query(){
		db.query();
		
	}
	
	@Override
	public void dispose() {
		db.dispose();
		
	}
	public static void main(String[] args) {
		DBImpl dbImpl = new DBImpl();
		dbImpl.connect();
		dbImpl.query();
		dbImpl.dispose();
	}
}

运行截图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值