java基础加强

Java基础加强

1,程序员学习程序的心态:没有学不会的技术,学习java细节太多,最好反复琢磨。做软件开发,需要有经验人士开放、交流共享自己的经验。程序员网校必将制作每个技术点的文字和视频教程。尽可能一针见血地讲解清楚问题的本质和最大限度地节省学习时间。

2,交通灯管理项目需求分析,对于在现实中存在的模型,我们最好画图分析。面向对象的分析与设计:对象有红绿灯、红绿灯的控制系统、汽车、路线。

3,小球从一根绳子的一段移动到另一端,对象有:小球和绳子,其中小球移动是小球提供的动作,不是绳子的,调用nextPoint()方法。

4,石头磨成石刀,石刀砍树,做成木材,最后做成椅子。石头磨成石刀,虽然变了样子,但是自己不能消失,所以不是调用者,应用:Stoneknife=KnifeFactory.createKnife(stone);Chair=ChairFactory.makeChair(material);面向对象设计需把握一个重要经验:谁拥有数据,谁就对外提供操作这些数据的方法。

5,单例:peivate NumberMachine(){

public staitic NumberMachine getInstance(){

return instance;

private static NumberMchine instance=new NumberMachine();

}

 

}

6,MyEclipseeclipse的插件,扩大了eclipse的功能。学会ecplise使用技巧,用switch workspace切换工作区,会静态导入,学会设置快捷键:window->preferences->general->content

IDEiterity development environment 集成开发环境的简写,它使用工程化方式管理一个项目。JMSJMXJNDI

7一个workspace可包含多个projet,一个workspace保留了一套环境选项的配置,例如:所使用的javacjava命令等,细节可查看window->preferences.

8,透视图是由若干个小窗口的集合。

9,查看变量值如何调试变量:Debug(选中变量点watch运行)

10,高版本的java能运行低版本的javac编译的程序,反之则不能。

11,快捷键的绑定:general->keys,删除绑定:remove bingding

12,增加了一个库相当于增加了多个jar

13,静态导入(jdk1.5新特性):import 语句可以导入一个类或某个包中所有类。import static语句导入一个类中的某个静态方法或所有静态方法。

import static java.lang.Math.max;导入max方法。可以省略类名:

system.out.println(max(3,5));

14,可变参数(jdk1.5新特性):

Public static int add(int x,int…args):定义若干个整数用“”。可变参数只能出现在参数列表的最后,位于变量类型和变量名之间,前后有无空格都可以,调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组形式访问可变参数。

public static int add(int x,int…args){

int sum=x;

for(int i=0;i

sum+=agrs[i];

}

return sum;

}

15,增强for循环语法:for(type 变量名:集合变量名){….}

例如:for(int arg:agrs){

Sum+=arg;}

注意事项:迭代变量必须在()中定义,集合变量可以是数组或实现了Iterable接口的集合类。

16,基本数据类型的自动拆箱与装箱:享元模式是指对于基本数据类型,如果要装箱成Integer类对象时,如果一个数值在-128—127之间,一旦把他们装箱成Integer对象,就会把他们缓冲在一个磁盘里,等到下次用时直接使用。装箱是指把一个基本数据类型装成了Integer对象。

拆箱是把Integer类型转换成基本数据类型。

17,枚举(jdk1.5新特性):让某个类型的变量的取值只能为若干个固定值中的一个。枚举是一个类,每一个枚举都是一个对象,枚举关键字是enum.例如:

public enum WeekDay{

SUN,MON,FRI;}

 

18,为枚举定义构造方法:元素列表放在枚举之前,构造方法须放在元素列表之后,构造方法为私有private,在元素后面加上相应参数,表明调用相对应的构造函数。

19,带有抽象方法的枚举:public abstract TrafficLamp nextLamp();

nextLamp()返回的是TrafficLamp.枚举相当于一个类,其中可以有构造方法,成员变量,普通方法和抽象方法。枚举元素必须位于枚举体中的最开始部分,枚举元素列表要有分号与其他成员分隔。枚举元素MONMON()效果一样,都是调用默认的构造方法。枚举只有一个成员时,就可以作为一种单例的实现方式。

20反射(jdk1.2特性):反射就是把java类中的各个成分映射成相应的java类。java程序中各个java类属于同一类事物,描述这类事物的java类名就是Class。内存中有几个字节码就有几个Class对象,就会从内存中加载过来缓存在虚拟机里。得到各个字节码对应的实例对象:1)类名.Class 例如:System.Class

2)对象.getClass(),例如 new Date().getClass()

3)Class.forName(“类名”) 例如 Class.forName(“java.lang.String”)

21Constructor类代表某个类中的一个构造方法。得到某个类所有的构造方法:

Constructor[]  constructors=Class.forName(“java.lang.String”).getConstructors();

Constructor[]  constructors=Class.forName(“java.lang.String”).getConstructors(StringBuffer.class);

22,Field类代表某个类中的一个成员变量,代表字段;

Field fieldx=pt1.getClass().getField(“X”);

getField是访问可见成员变量,而getDeclaredField可见不可见均可访问。

23Method类代表某个类中的一个成员方法。

24,当一个对象被存储进Hashset集合类中以后,就不能修改这个对象中的那些参与计算的Hashset值的字段了,否则,会导致内存泄露,例如:

Collection collections=new Hashset();

ReflectPoint pt1=new ReflectPoint(3,3);

ReflectPoint pt2=new ReflectPoint(4,3);

 

ReflectPoint pt3=new ReflectPoint(3,3);

Collection.add(pt1);

Collection.add(pt2;

Collection.add(pt3);

Collection.remove(py1);//不能删除成功

25,框架与工具类有区别:工具类被用户的类调用,而框架则是调用用户提供的类。在框架中无

Pt1.x=3;法直接new某个类的实例对象,而要用反射方式来做。

26,内省(IntroSpector)JavaBean进行操作。JavaBean是特殊的java类,方法符合某种规则的java类就成为JavaBean,比如方法名字以getset开头。把Person类当成javaBean类来操作:

class Person

{

      private int x;

      public int getAge(){

       return x;}

      public void setAge(int age){

       this.x=age;}

}

27,AgejavaBean属性名是age,即如果第二个字母是小写,则把第一个字母变成小写;CPUjavaBean属性名是CPU;即如果第二个字母是大写,则保持不变;

gettimejavabean属性名是time,都是小写也保持不变;

28InstroSpector有个静态方法getBeanInfo方法,得到的BeanInfo对象封装了把这个类当做JavaBean看的结果信息。

BeanInpfo beanInfo=Introspector.getBeanInfo(pt1.getClass());

30,注解(Annotation)也算是一个类有三种基本注解:DeprecatedOverrideSuppressWarning;注解相当于一种标记,在程序中加了注解等于为程序打上了某种标记,有标记就去做相应的动作注解可以加在包、类、成员变量、方法、参数等等上面注解就相当于一个源程序中要调用的一个类,所以要在源程序应用之前就开发好;

31,定义一个最简单的注解:public @interface MyAnnotation{}

把它加在某个类上:@MyAnnotation public class AnnotationTest{}

32,Retention元注解有三种取值:1RetetionPolicy.SOURCE2RetetionPolicy.CLASSRetetionPolicy.RNTIIME,分别对应java源文件、Class文件和内存中的字节码;但是默认为Class文件。

33,为注解增加基本属性:@MyAnnotation(Color=”red”);//设置颜色。前面学的@SuppressWarning(“deprecated”)也是一种属性;

34,数组属性:int[] arrayAttor() default{1,2,3,4};

@MyAnnotation arrayAttor={2,3,5}

如果数组属性中只有一个元素,这时候属性部分可以省略大括号;

35,枚举属性:EnumTest.TrafficLamp lamp();

@MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN);

36,注解类型属性:

MetaAnntation annotationAttr() default @MetaAnnotation(“xxx”);

@MyAnnotation(annotationAttr=@MetaAnnotation(“yyy”));

37,体验泛型:泛型是JDK1.5所有新特性中最难得部分。没有使用泛型时,只要是对象,不管是什么类型的对象,都可以存储进同一个集合中。使用泛型集合,可以将一个集合中的元素限定为一个特定类型。集合存储同一个类型的对象,这样更安全。并且从集合获取一个对象时,编译器也可以知道这个对象的类型,不需要对对象进行强制类型转换,这样更方便。

ArrayList  collection1=new ArrayList();//未使用泛型

ArrayList collection2=new ArrayList();//使用泛型

ArrayList collection2=new ArrayList< Integer>();//使用泛型

Collection3.add(“aggg”);//不能成功,因为输入的是字符串类型。

collection3.getClass().getMethod(“add”,Object.class).invoke(colletion3,”agg”);

System.out.println(collection3.get(0));//结果输入agg

38,泛型是提供给java编译器使用的,可以限定集合的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉类型信息,使程序运行效率不受影响。

39,术语:ArrayList    E称为类型变量或类型参数

整个ArrayList 称为参数化的类型

ArrayList中的Integer称为类型参数的实例

<>读作typeofArrayList称为原始类型。

参数化类型和原始类型互不被调用。

参数化类型不考虑类型参数的继承关系:

Vector v=new Vector();

创建数组实例时数组元素不能使用参数化的类型,例如:

Vector vechList[]=new Vector[10];

40,使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。

41C++用模板函数解决,只写一个通用函数,可以适用各种类型,如:

team class

T add(T x,T y){

return (T)(x+y);

}

T代表任意类型,语法:   T  add(T x,T y){

return (T)(x+y);

}

42,类加载器:三个主要类加载器:BootStapExtClassLoaderAppClassLoader。每个类负责特定位置的类,类加载器也是java类。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java,integer,constructor,deprecated,编译器,class)