今天没有上课,正好有机会让我把21,22号张孝祥老师讲的内容复习了一遍,来传智的前两天课就是张老师上的,将JAVA的高级特性讲了一下。给我的感觉张老师在课上讲的很生动,比他在网上的视频讲的好!
先说说张老师那两天传授了我们什么知识吧!
1.静态导入:先举个离例子 。
import java.lang.Integer.parseInt;
public class StaticImport {
int x = parseInt("123");
System.out.println(x);
}
这样的程序如果不在IDE 工具中输入,是很难看出这个程序代码会出现问题,可它偏偏就出问题了,这是为什么呢?因为程序里面有个静态方法,如果导入import static java.lang.Integer.parseInt;这样的程序就可以运行了。
2.可变参数与for循环增强
这个是一般的用法:
public static void loop(String[] args){
for(int i=0;i<args.length;i++)
{
System.out.println(args[i]);
}
}
这个是JDK 增加的新特性的用法!
public static void loop(int x,int... args ) { //这里的参数一定要以这样的形式输入
for(int i:args)
{
System.out.println(i);
}
}
3.枚举
写枚举技巧:
1. enum Gender{MALE,FEMALE,BOTH}
2. enum Gender{MALE,FEMALE,BOTH;public abstract getTitle();}
3.enum Gender{MALE{},FEMALE{},BOTH{};public abstract getTitle();}
4.填充各个{}中的getTitle方法。
下面是个红绿黄灯的例子:
public enum TrafficLamp {
RED(30){
public TrafficLamp next()
{
return GREEN;
}
},
GREEN(50){
public TrafficLamp next()
{
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp next()
{
return RED;
}
};
public abstract TrafficLamp next();
private int time;
private TrafficLamp(int time)
{
this.time = time;
}
4.反射.
这个知识点,真是费了我好大劲才理解。当真正理解了,其实也就不难了。先举例子来理解什么是反射。
先建这样的一个类,带会下面有个类里面有反射成员变量的方法的!
public class ReflectPoint {
private int x;
public int y;
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
public class Test{
String obj = (String)Class.forName("java.lang.String").newInstance();
这是制造另一个章:Class.forName("java.lang.Integer")
---------------------
讲Constructor://构造方法
Constructor constructors[] = Class.forName("java.lang.String").getConstructors();
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
String str = (String)constructor.newInstance(new StringBuffer("abc"));
System.out.println(str);
class.newInstance()内部其实就是在用默认的构造方法
-----------------------
讲Method //方法
Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);
System.out.println(charAt.invoke(str, 1));
-------------------------
讲Field //成员变量
ReflectPoint point = new ReflectPoint(1,7);
Field y = Class.forName("cn.itcast.corejava.ReflectPoint").getDeclaredField("y");
y.setAccessible(true);
System.out.println(y.get(point));
Field x = Class.forName("cn.itcast.corejava.ReflectPoint").getDeclaredField("x");
x.setAccessible(true);
System.out.println(x.get(point));
}
在这里我们运行的时候可以看出,ReflectPoint类里面的x和y 都可以打印出来了!
学习心得:先从这四个知识点来看,张老师的确很让人敬佩!以上的一些程序代码均为张老师课堂即兴发挥所写,也可以看出,张老师对JAVA特性的深刻理解能力!现在说说我对这些程序代码的理解,说实话,才开始听张老师讲的时候,我感觉很模糊的,但是当我真正理解了之后,觉得这些程序写的真是太好了。象以后我门在学习JAVA 的时候,一定要对每个知识点要慢慢的消化吃透,切不能走马观花。一个知识点必须要反复的动手练习,不然很难理解其中的奥秘所在的!
JAVA高级特性(二)明天待续!