一、Eclipse的使用技巧
1. Workspace与project
在Eclipse查看变量值的步骤:先打开Debug透视图,然后选中变量点Watch
必须要求会切换工作间与导入项目
2. Perspective与view (透视图与视图)
透视图其实就是调用不同的小窗口的集合,以便方便程序的编译运行。
在使用Eclipse时候可以增加很多快捷键比如补全代码通常是设置为alt+/
3. 设置单个工程的javac与java
4. 快捷键的绑定与代码模板
代码模板的添加:WindowàpreferencesàTemplates中添加
快捷键的位置:Generalàkeys,设置alt+/键进行内容提示时,要注意解除alt+/原来的绑定关系,直接输入alt+/就可以找到他的绑定关系。
二、静态导入
·Import语句可以导入一个类或某个包中的所有类
·import static 语句导入一个类中的某个静态方法或所有静态方法
三、可变参数与for循环增强
1.可变参数
·问题:一个方法接受的参数个数不固定,例如:
System.out.println(add(2,3,5));
System.out.println(add(1,2,3,5));
·可变参数的的特点:
--只能出现在参数列表最后;
--位于变量类型和变量名之间,前后有无空格都可以;
--调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体重以数组的形式访问可变参数。
2.增强for循环
·语法: for(type 变量名:集合变量名){}
·注意事项:
--迭代便来那个必须在()中定义!
--集合变量可以是数组或实现了Iterable接口的集合类
·举例:
public static int add(int x,int …args){
int sum=x;
for(int arg:args){
sum+=arg;
}
return sum;
}
四、基本数据类型的自动拆箱装箱
·自动装箱:
--Integer num1=12;
·自动拆箱:
--System.out.println(num1+12);
·基本数据类型的对象缓存
Integer num1=12;
Integer num2=12;
System.out.println(num1==num2);
如这些数字在一个字节之类也就是-128-127之间这些数字包装成一个Integer对象,就会把它缓存起来,下次如果再遇到此数字时候,直接从内存池中读取。
这就是一个设计模式:享元模式 也叫 flyweight
如果一个数据要经常被使用又不改变,那么就可以用这种模式。
有很多个很小的对象他们有很多属性相同把他们变成一个对象那些不同的方法把他们变成不同的参数成为外部状态相同的属性成为内部状态。
Integer num3=129;
Integer num4=129;
System.out.println(num3==num4);
Integer num5=Integer.valueOf(12);
Integer num6=Integer.valueOf(12);
System.out.println(num5==num6);
五、 枚举
--枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
public enum WeekDay{
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
枚举也是类,同样也有类的各个特征
六、反射
·反射:就是把java类中的各种成分映射成相应的java类。例如,一个java类中的class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包,等等信息也用一个个的java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个类,表示java类的class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,他们是Field、Method、Contructor、Package等等。
七、JavaBean内省(IntroSpector)
·JavaBean是一种特殊的java类,主要用于传递数据信息,这中java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
·如果要在两个模块之间传递多个信息,可以将这些信息封装到一个javaBean中,这种javaBean的实例对象通常称之为值对象(Value Object简称VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,大家觉得这些方法的名称叫什么好呢?javaBean的属性是根据其中的setter和getter方法确定,而不是根据其中的成员变量。如果方法名为setId,中文意思就是设置id,至于你把它存到那个变量上,不管。如果方法名为getId,中文意思即为获取id,,去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的
八、java注解
--注解相当于一种标记,加了注解就等于打上了某种标记,没加则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方的参数已经局部变量上。
九、泛型
·泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的结合时会去掉“类型”信息,是程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样。由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如,用反射得到集合,再调用add方法即可。
·没有泛型时,只要是对象,不管是说明类型的对象,都可以存储进同一个集合中。使用泛型结合,可以将一个集合中的元素限定为一个特定类型,结合中只能存储同一个类型的对象,这样更安全,并且当从集合获取同一个对象时,编译器可以知道这个对象的类型,不需要对对象进行强制类型转换。
泛型是给编译器看的,运行的时候已经没有了。
十、类加载器
·声明是类加载器和类加载器的作用。
·java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap、ExtClassLoader,AppClassLoader
·类加载器也是java类,因为其他是java类的类加载器本身也要被类加载器加载,显然必须有第一个类的加载器不是不是java类,这正是BootStrap。
·java虚拟机中的所有类装载器采用具有父子关系的树形结构进行组织,在实例化每个类装载器对象时,需要为其指定一个父级类装载器对象或者默认采用系统类装载器为其父级类加载。
十一、代理的概念与作用
·生活中的代理
--武汉人丛武汉的代理商手中买联想电脑和直接找联想总部买电脑,你最终的主题业务有说明区别?基本一样,都解决了核心问题,但是,一点区别都没有吗?从代理商那里买真的没有好处?
·程序中的代理
--要为宜存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理、日志、计算方法的运行时间、事务管理、等等
--编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能代码。
--如果采用工厂模式和配置文件的方式进行管理,则不需要修改客户端程序,在配置文件中配置是使用目标类、还是代理类,这样以后很容易切换,比如,想要日志功能时就配置代理类,否则配置目标类,这样,增加系统功能很容易,以后运行一段时间后,又想去掉系统功能也很容易