1.IDE project workspace
switch workspace
2.MyEclipse
javac java
java的版本不能比javac的版本低
workspace project的可以分别配置 未来的改变
compiler JREs
UnsupportedClassVersionError
如果配置在workspacem中,多个project可以使用
3.透视图 视图
perspective
show views
透视图是若干个视图的组合,它是为某一类开发的
4.快捷键
syso
surround with
为什么改变 干什么
java editor
${cursor} 光标 自定义配置try catch finally
CTRL+SHIFT+F
注释
为什么改变 干什么
通用 补全
keys
ctrl+space 与 alert+/
ctrl+shift+l (list) 列出所有的快捷键
5.JDK1.5和1.6的新特性
6.import
import static java.lang.Math.*; ---> max(3, 6);不用Math.XXX
带入所有的类和方法,有点像thinking in Java
7.可变参数 只能出现在参数列表的最后
如果没有,要定义很多重载的方法
... 0个或者多个 原理的:数组
疑问:数组是怎么定义的,初始化的...
决心:敲完代码,写日志
8. int[] y
for(int x : y){用x}
9.自动装箱 拆箱 jdk1.5的才有,以前的编译出错
null
尝试:== equals int string
int 中() 小的数字被缓存 响原模式
parseInt() valueOf()
String s = "a"+"b"+"c"; 一个对象?
扩展:基本类型 String 集合 的装换
10.java语言规范 sun网站下载
Blocks and Statements
11.枚举
int可以随便定义,用枚举是为了把运行时的错误转到编译时,错的编译就不干了
没有枚举前用类模拟:
人这个类中,成员变量配偶,她也是人这个类型
私有化构造方法 public static final 成员变量
下一个:两种考虑
a. if() else{} this == XXX
如果这个对象等于XXX,就...
b. 将这个方法变成抽象的,子类实现
匿名内部类XXX = new WeekDay() {}; 这个类没有名字,它继承了WeekDay
模式:
枚举中的.XXX 都是它的一个实例对象
private 只给自己构造
枚举中 RED 大写
成员要放在第一位
public abstract TrafficLamp next(); 只会使用一次 名称不重要了 RED(){}, ...
总结:先是枚举中的构造方法 然后是枚举中的抽象方法
两者结合,具体应用
枚举 name() ordial() values() valueOf(XXX) 方法
枚举中只有一个成员时,就可以作为单例
12.反射:
Class类 而class是关键字
字节码是一个类,同时它也是Class的一个实例对象
三种:
Class x1 = Date.class;
Class x2 = Class.forName("java.util.Date");
Class x3 = new Date().getClass();
x1=x2=x3
在内存中加载字节码,它们都是同一份
第二种:类名没有出现在源程序中,扩展性好
Class.forName(XXX);
在虚拟机注册表中看是否已加载
是 返回已经创建的字节码
否 在类加载器中加载该类的字节码并返回字节码
加载不成功就抛出ClassNotFoundException
Class内 八种基本+void 预定义的Class实例对象
int.class == Integer.TYPE
反射就是把一个类中的各种成分映射成相应的java类
13.例子:
得到Date的构造方法 --> 拿到某一个,传入参数 该参数又是Class
得到构造方法以后就得到实例对象 写程序的时候不知道要new那个,框架不知道你的名字,用反射
String StringBuffer
由String abc = new String(new StringBuffer("abc"));来推导
.class.getConstructor(XXX.class);
.newInstance(XXX)
对于那种默认的构造方法(无参的): 简单一点的写法是
String str = String.class.newInstance();
Field 代表某个类中的一个成员变量 是类的,不是某个对象的
.getField("");
.get(obj) 去某个具体对象的XX的值
1.对于private的不能拿
---> Declared 暴力反射 所有声明了的都可拿
2.类拿 和对象拿
------------------------------------------------------------------------------------------------
1.方法的反射
"abc".charAt(2);
.getMethod()
.invoke(XXX, YYY)XXX代表哪个对象 YYY代表传入的具体参数值
.invoke(null,ZZZ) null代表不同过对象,推测出是类的static
结合可变参数:
ZZZ传入的参数是可变的
new int[]{} 数组中的个数为零个
new String[]{} ---> args
2.没听懂
public static void main(String[] args)
Test.main(new String[]{"abc","xyz"});
Method mainMethod = Test.class.getMethod("main", String[].class);
mainMethod.invoke(null, new String[]{"aaa", "bbb"}); //错 认为是两个参数 兼容JDK1.4
mainMethod.invoke(null, new Object[]{new String[]{"aaa", "bbb"}});
mainMethod.invoke(null, (Object)new String[]{"aaa", "bbb"});
由于main是static的,就为null
3.数组的反射
具有相同的维数和元素类型属于同一个类型
getSuperClass()
数组的父类是Object,可以当做Object
new String("abc").getClass() 对象用getClass
String.class
Object[] obj = new int[2]; //错
Object[] obj = new String[3]; //对
做框架 判断传入的是数组还是基本的
dealObject(Object obj){
if() else 判断类型,看传入的是什么
}
数组:基本数据类型 和 String的
基本数据类型的还可以有一种方法
决心:为了在这个行业发展的很高,钻研,不能看表面,要设计优雅
4.反射的作用:实现框架功能
框架与工具类:
我做零件,供别人调用
思维的转变:由自己做主,变为被别人控制,写给别人用
工具类
框架
房子在门前做,我做的房子可以在未来几年调用门
5.Set中不能放重复的,equals
6.Collection col = new ArrayList() HashSet
在配置文件中配,而不用改变源代码,改的是源代码,这样设计就优雅
面向上层,它们都是该类的子类,用父类引用他们
父类 更通用
子类 更具体
properties 配置文件 读入具体的
交给用户的.class 批处理 目录会改变
相对路径也不行
绝对路径更不行
绝对路径,前面的路径是有一个方法推算出来 getRealPath()
现在用.getClassLoader().getResourceAsStream("") 放在classpath环境变量下的 同时它叫做资源
eclipse src(源程序目录 新建一个Source Folder也可以)
.java --> 编译为.class,编译到classpath指定的目录
非java --> 原封不动的搬到classpath指定的目录
直接 .getResourceAsStream("") 在同一个包中
7.尝试:refector debug
8.把COPY放在首位
9.框架是读取配置文件,用反射创建你需要的类
10.依赖注入 pageContext.getSession
我给你一个引用变量,你通过这个引用变量来调用
11.内省introSpector
12.JavaBean 符合一定规则的java类,set get
JavaBean的属性判断:setXXX或getXXX而不是成员变量
如果第二个字符是小写的,第一字母就变成小写
对于boolean的
13.retVal
14.JavaBean 反射
15.Beanutils 对JavaBean 设置属性和方法
BeanUtils. 对一个JavaBean 多个属性
copy describe
PropertyUtils. 对一个属性
16.下大的jar包
类似的 : 网页优化 下一个大的图片,用CSS定位,而不是下二十张图片