JAVASE重点区域

14:Java的反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

  • 静态加载类:在程序编译期加载;
  • 动态加载:在程序的运行期加载;

所有类都是Class类的实例(对象),所有的属性都是Field类的实例,所有的方法都是Method类的实例。

1、类的反射

获取class类对象

  // 方法一,通过对象获得Class类类型创建对象new

Demo d = new Demo();

Class c1 = d.getClass();

  // 方法二,通过类名获得Class类类型

Class c2 = Demo.class;//每个类都有一个隐含的静态属性class

// 方法三,通过动态加载(反射的方法

Class c3 = null;

try {

c3 = Class.forName("com.oracle.test.Demo");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

2、获取类的信息

获得类的属性和方法信息(获取方法和属性进行使用)

3、方法的反射(再进行调用方法)

十五、泛型

1、方法的泛型

2、类和接口的泛型

3、通配符

十六、枚举

2、常用方法(进行调用枚举类的固定值)

3、自定义枚举属性和方法

4、EnumSet和EnumMap的用法(进行增加删除枚举值)

十七、注解

可以自定义注解

源码注解:注解只在源码中存在,编译成.class文件就不存在了;

编译时注解:注解在源码和.class文件中都存在;

运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解;(运行时注解还起作用)

解析注解   可以调用获取方法或者类的注解值,获取方法或者类的注解值。

十八、配置文件操作

1、XML文件

2、json文件

3、properties文件

三种文件的写入和读取的使用方法

二十、设计模式

1、单例模式

      1.1 饿汉模式

      1.2 懒汉模式

      1.3 区别

  • 对象创建的时机不同,一个是类加载时创建对象,另一个是在需要时创建对象;
  • 饿汉模式,加载速度比较慢,获得对象速度比较快,是线程安全的;
  • 懒汉模式,加载速度比较快,获得对象的速度比较慢,是线程不安全的;

2、工厂模式

概念:把创建对象的过程封装为一个方法,工厂方法模式。

      1:发型接口:

public interface IHair {
	//更换发型
	public void change();
}

        2:具体发型实现类(以左偏分为例){具体实现类}

public class LeftHair implements IHair {

	@Override
	public void change() {
		System.out.println("左偏分。。。。。。");

	}

}

     

         3:工厂类:

public class HairFactory {
	public static IHair getHairByClassKey(String key){
		//读取配置文件的内容
		Map<String,String> map = new ReaderProp().reader();
		try {
			Class c = Class.forName(map.get(key));
			IHair ih = (IHair) c.newInstance();
			return ih;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		return null;
	}
	
}

               4:属性文件

left=com.oracle.test2.LeftHair
right=com.oracle.test2.RightHair
center=com.oracle.test2.CenterHair

           5:属性文件读取类:

public class ReaderProp {

	//用来读取配置文件信息的方法
	public Map<String,String> reader(){
		Properties prop = new Properties();
		Map<String,String> map = new HashMap<String,String>();
		try {
			prop.load(new FileInputStream("hair.properties"));
			
			Enumeration en = prop.propertyNames();//获得属性文件中所有键的枚举
			while(en.hasMoreElements()){
				String key = (String) en.nextElement();
				String value = prop.getProperty(key);
				map.put(key, value);
			}
			
			return map;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
}

                  6:客户端实现

IHair ih = HairFactory.getHairByClassKey("left");
ih.change();

 

工厂创建的流程,嘿嘿嘿!!!

1:创建接口

2:创建实现接口的类(多个)

3:创建工厂类,通过反射(通过读取文件)。返回父类接口对象。

4:客户端使用父类引用子类对象,调用子类的实现的方法,实现多态。

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值