黑马程序员--java高新技术 25--枚举,反射

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

 

/*1.5 新特性总结:
静态导入
可变参数
增强for(foreach)
基本数据的自动拆装箱
枚举
泛型
*/

/*25-2
API: Application Programming Interface
java EE
IDE: Integrated development environment
jms
jmx
jndi
*/

/*25-3
preference--java--compiler  //javac 编译器版本
				|--Installed JREs   //java 运行的版本
		  |--general--keys  //快捷键

file--switch workspace  //切换工作间



*/

/*25-4
debug 透视图下:
	r变量--watch

*/

/*25-5
r--run as--run configuration--jre //运行环境
低版本的java不能运行高版本的javac编译的程序,会出现 UnsupportedClassVersionError

r(一个工程)--properties--run/debug setting--edit--(edit configuration)  //该路径也可打开运行环境
*/

/*25-6
模板代码:
properties--java--editer-templates
*/

/*25-7
jar Libaray 更改jre库,Libaray 就是很多的jar
r工程--build path--configure build path--java build path 
*/

/*25-8
1.5 新特性 
静态导入
*/

/*25-9
1.5 新特性 
可变参数

overload vs override
*/

/*25-10
1.5 新特性 
增强for
*/

/*25-11
1.5 新特性 
基本数据的自动拆装箱

享元设计模式flyweight:
有很多个小的对象,它们有很多属性相同,把它们变成一个对象,
那些不同的属性变成方法的参数,称之为外部状态,那些相同的属性称之为内部状态。
*/

/*25-12
1.5 新特性 
枚举
*/

/*25-14
枚举的基本应用:
name();
ordinal();//类似数组的角标
valueOf("SUN").toString();
values(); 把枚举变成数组
*/

/*25-17
Class cls = 字节码;

获得字节码的三种方式:
	System.class;
	new Date().getClass();
	Class.forName("java.util.Date");//全名

预定义的实力对象://参照isPrimitive();
void.class;
int.class = Integer.Type;//还有其他的7种基本数据类型。
isArray();//是否是数组。
*/

/*25-19
反射会导致程序的性能下降
*/

/*25-20
getField(pt1);
getDeclaredField(pt1);
setAccessible(true);//暴力反射
*/

/*25-22
谁有数据谁就是干这个事的专家,方法就分配给谁。
*/

/*25-23
用反射调用 main 方法的原因是可以在没有加载 类的前提下用 class.forName(name); 方法来加载类, 之后就可以执行main 方法了。

r--run as--run configuration--arguments   //用于给程序传递参数。
*/

/*25-24
getSuperclass();

可变参数:若满足1.4 的条件就按照1.4的处理,不满足就按照1.5的处理。
*/

/*25-26
存入HashSet 集合的元素(对象) 的 数据发生改变时,其hashcode 的值也会发生改变,因此在使用时应该注意其HashCode 值 是否有发生改变。否则会发生内存泄露。
*/

/*25-27
反射的作用:
实现框架
*/

/*25-28

getClass().getResourceAsStream(); //无法通过类加载器写入数据
*/

/*25-29
内省:introspector
javaBean: 以set 或 get 开头 的方法 的类
*/

//个人疑问:?1, ?2, ?3, ?4

import java.lang.reflect.Constructor;

public class Demo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//WeekDay
		Class clazz = WeekDay.MON.getClass();//@0  	用getClass()获得的构造函数是一个  
		//?1: 为何是一个? 为何会少掉构造函数?少掉了哪些构造函数?
		Constructor[] cons = clazz.getDeclaredConstructors();
		System.out.println("共有 "+cons.length+" 个构造函数");
		for (Constructor con : cons) {
			System.out.println(con.toGenericString());
		}
		
		Class clazz1 = WeekDay.class;//@1  	与@0 相比 用 .class 的方法却获得3个。  
		//?2: 为何是3个 ,多出来的那个构造函数是什么意思?   ?3: 为何与@0 不同?
		Constructor[] cons1 = clazz1.getDeclaredConstructors();
		System.out.println("共有 "+cons1.length+" 个构造函数");
		for (Constructor con : cons1) {
			System.out.println(con.toGenericString());
		}
		
		System.out.println();
		//Weekday1 
		Class clazz2 = Weekday1.MON.getClass();//@2  与@0 相比 该方法enum 没有 abstract 方法, 获得的构造函数却是2个
		Constructor[] cons2 = clazz2.getDeclaredConstructors();
		System.out.println("共有 "+cons2.length+" 个构造函数");
		for (Constructor con : cons2) {
			System.out.println(con.toGenericString());
		}
		
		Class clazz3 = Weekday1.class;//@3  比较WeekDay 和 Weekday1,WeekDay仅多了一个abstract方法。
		//说明WeekDay 之所以会多出或少掉构造函数是因为 abstract 方法
		//?4:为何WeekDay 和 Weekday1 会有这样的差异?或者为何abstract方法会造成这样的差异
		Constructor[] cons3 = clazz3.getDeclaredConstructors();
		System.out.println("共有 "+cons3.length+" 个构造函数");
		for (Constructor con : cons3) {
			System.out.println(con.toGenericString());
		}
			
	}
}


enum WeekDay{
    SUN(){
            public WeekDay nextDay(){
                    return MON;
            }
    },MON(){
            public WeekDay nextDay(){
                    return SUN;
            }
    };
    
    WeekDay(){
            System.out.println("first");
    }
    WeekDay(int x){
            System.out.println("second");
    }
    
    public abstract WeekDay nextDay();
}

enum Weekday1{
    SUN,MON;
    
    Weekday1(){
            System.out.println("first");
    }
    Weekday1(int x){
            System.out.println("second");
    }
    
}


---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ---------------------- 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值