传智播客-enhance-day11

来源:互联网 发布:php httprequest 使用 编辑:程序博客网 时间:2024/05/05 11:45

---------------------- android培训java培训、期待与您交流! ----------------------

----------eclips加强-----------------------------

java ee -->Java Platform,Enterprise Edition
ide     -->Integrated Development Environment, 即集成开发环境
jms     -->Java Message Service, 即Java消息服务
jmx     -->Java Management Extensions,即Java管理扩展
jndi    -->Java Naming and Directory Interface,Java命名和目录接口
perspective--->透视图
staticImport-->状态进口
enhance------->提高
view的集合叫perspective
template模板制作:windwos-preferences-java-editor-templaters-new...

enhance03
设置快捷键:preferences-General-keys

preferences--属性
General------通用
content------内容
assist-------助理
binding------绑定

内容填充快捷键:System.out.println();  Alt+/

如何在调试中但看变量值:
在左侧打断点,右键debug as--单部执行-watch

配置模版:
preference-java-editor-template

enhance08
import语句,可以导入一个类或某个包中的所有类
import static语句导入一个类中的某个静态方法或所有静态方法。

enhance09
可变参数(int x,int ... args)
面试:overload us override的不同
重载     vs 重写
parameter---参数
例:
class variableparameter{
 public static void main(String[] args){
  add(2,3);
  add(2,3,5);
 }
 public static int add(int x,int ... args){
  int sum=x;
  for(int i=0;i<args.length;i++){
   sum+=args[i];
  }
  return sum;
 }
}


enhance10
for(type 变量名:集合变量名){...}  //其中集合必须实现iterator
例:
public static int add(int x,int...args)
{
 int sum=x;
 for(int arg:args)
 {
  sum+=arg;
 }
 return sum;
}

注释整段快捷键:  /*  */   Ctrl+Shift+/

如何找sun公司文档


enhance11
自动装箱:(1.5新特性)
例:Integer x=12;
    Integer y=12;
    System.out.println(x==y);
当值两个值小于128时,x与y是一个,当值大于127时,x与y就变成了两个。(即-128~127)
自动拆箱:
例:System.out.println(x+12);


享元模式 flyweight:很多很小的对象,它们有很多相同的东西,就可以把他们变成一个对

象。不同的东西把它们做为外部的属性,做为方法的参数传入,把相同的东西做为这个类的

内部数据。

enhance12.
enum--枚举
weekday Sunday=0
枚举就是要让某个类型的变量的取值为若干个固定值中的一个,否则,编译器就会报错。枚

举可以让编译器在编译时就可以控制源程序中填写的非法值。

?????枚举是不是单例模式
答:不是,单例可以用枚举来实现,创建一个单例可以用只有一个元素的枚举。

enhance13
为了达到我们要的显示效果,要覆盖toString()方法。

enhance14
定义一个enum类

enchance15
在一个元素后面加上(x),即调用指定参数的构造方法
构造所有的方法都要在元素列表的后面。也就是说元素列表要在第一个位置。
元素列表后面的分号可有可无,但元素列表后面有其它方法时,这个分号是必须要加的。
trafficlamp--交通灯

enchance16
enum就是一个类,枚举的成员就是这个类的实例对象

内部类有四个类的修饰符:public
外部类只有两个类的修饰符:public

带抽象方法的枚举的实现步骤:
1,定义枚举:public enum TrafficLamp{Red,Green,Yellow}
2,抽象方法nextLamp:public abstract TrafficLamp NextLamp()
3,用匿名内部类实现new对象(必须覆盖abstract方法):
 Red{public TrafficLamp NextLamp(){}}
 Green{public TrafficLamp NextLamp(){}}
 Yellow{public TrafficLamp NextLamp(){}}
4,每个灯都要有一个时间,用构造函数实现:
 private int time;
 private TrafficLamp (int time){this.time=time;}
5,利用构造函数初始化(用时传入一个值调带参数的构造函数):
 Red(45){public TrafficLamp NextLamp(){}}
 Green(30){public TrafficLamp NextLamp(){}}
 Yellow(5){public TrafficLamp NextLamp(){}}

反射就是把java类中的各种成分映射成相应的java类

enhance17
得到字节码实例对象的方法:
1.类名.class,例如System.class
2.对象.getClass(),例如new Date().getClass()
3.Class.forName("类名"),例如Class.forName("java.util.Date");//这里的类名要写全

名即要加上包名。

九个预定义的实例对象:八个基本类型+void类型
例:Class clas1=void.class;
    Class clas2=int.class;

.isPrimitive()是不是基本类型。
数组和String都不是基本类型。

enhance19
Constructor类:代表某个类中的一个构造方法
例:得到StringBuffer的构造方法
String.class.getConstructor(StringBuffer.class);
String.class.getConstructor(int.class);
用反射的方法创建一个StringBuffer对象
例:ConStructor constructor1=String.class.getConstructor(StringBuffer.class);
    String str2=(String)constructor1.new Instance(new StringBuffer("abc"));

enhance20
快捷键:Alt+Shift+s  功能:生成源代码
得到private变量的值,.getDeclaredFild("x");
暴力反射:fieldx.setAccessible(true);

enhance21
字段的反射.将字段的值替换为新值。

enhance22
Method类:
invoke:是Method类的一个方法。

enhance23
invoke?
mainMethod.invoke(null,(object)new String[]{"111","222","333"});  //invoke是在哪

学的???
运行时传入参数:在Run config中的Arguments中写入参数。
例:
String startingClassName=args[0];
Method mainMethod=Class.forName(StratingClassName).getMethod("main",String[]);
mainMethod.invoke(null,(Object)(new String[]("11","22","33")));

enhance24
Arrays.asList(a1);
此节用到了Arrays工具类.
基本数据类型不能转换成Object。 
例:int [] a1=new int[2];
    Object [] obj=a1;  //这里不可以基本数据类开不能转换成Object数组。

Arrays.asList(a1); //当a1是int型时,不能将其打印出来。当a1是String类型时,可以直

接用此方法将数组打印出来。

enhance25
疯狂打印函数:
private static void printObject(Object obj){
 Class clazz=obj.getClass();
 if (clazz.isArray()){
  int len=Array.getLength(obj);
  for(int i=0;i<len;i++){
   Syste.out.println(Array.get(obj.i));
  }
 }else{
  System.out.println(obj);
 }
}

enhance26
当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的

字段了。否则,对象修改后的哈希值与最初存储进HashSet集合中的哈希值就不同了。
面视题:1.ArrayList与HashSet的区别
        2.HashCode方法的作用。

enhance27
反射框架的一个实例。

这节用到了Properties

例子:文件载入
InputStream ips=new FileInputStream("aaa.rroperties");
Properties props=new Properties();
props.load(ips);
ips.close();

Class.forName(className).newInstance();  //newInstance()是调用空参数的instance方

法。
???这里需要查下Class的api,看下newInstance是谁的方法。


enhance28
网页的getRealPath()得到配置文件的位置。

enhance29
IntroSpector内省:JavaBean:是一个特殊的类,必须要有set和get方法。
如果第二个字母是小的,则把第一个字母变成小的。

enhance30---JavaBean的内省操作
propertydescriptor----属性描述符

属性描述符(属性名,类)
PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX=pd.getReadMethod();
Object retVal=methodGetX.invoke(pt1);
System.out.println(retVal);

PropertyDescriptor pd2=new PropertyDescriptor(propertyName,pt1.getClass());
Method methodSetX=pd2.getWriteMethod();
methodSetX.invoke(pt1,7);

用eclipse抽取方法:
选中代码-->右键Refactor-->Extract Method-->ok

enhance31
利用IntroSpector.getBeanInfo方法,得到BeanInfo对象。

enhance32
BeanUtils工具:增加build path
需要下载jar工具包。

java7的新特性:
Map map={name:"xxx",age:18};
map 和javaBean的转换

BeanUtils和PropertyUtils区别:
BeanUtils是以字符串进行操作的。想让JavaBean帮你转换。
PropertyUtils是以数据的原类型进行操作的。不想转换数据类型。

enhance33
枚举,注解是java1.5的新特性

标签@
 @SuppressWarnings("deprecation")//不显示过时提示
 @Deprecated//下列方法已经过时,调用时会提示此方法已经过时。
 @Override//此方法是覆盖的,可以检查方法是否写错

enhance37
范型是给编译器看的,编译后的代码在运行时是会去掉范型信息的。也就是说,定义一个

collection<Integer>,用反射,collection.getClass().getMethod

("add",Object.class).invoke(collection,"abc")是可以打印出abc的。
一些常用术语

enhance38
泛型中的?通配符

enhance39
map.entry
jsp中的set或map迭代

enhance41
类型参数推断:
    当某个类型变量只在整个参数列表中的所有参数和返回值中的一处被应用了,那么根据

调用方法时该处的实际应用类型来确定,这很容易凭着感觉推断出来,即直接根据调用方法

时传递的参数类型或返回值来决定泛型参数的类型。
static <E> void swap(E[] a,int i,int j)
    当某个类型变量在整个参数列表中所有参数和返回值中的多处被应用了,如果调用方法

时这多处的实际应用类型都对应同一种类型来确定,这很容易凭着感觉推断出来。
static <T> T add(T a,T b)
    当某个类型变量在整个参数列表中的所有参数和返回值中的多处被应用,如果调用方法

时这多处的实际应用类型对应到了不同的类型,且没有使用返回值,这时候取多个参数中的

最大次类型。
static<T> void fill(T[] a,t v)

enhance42
在类上定义泛型:
Dao--->data access object

public class GenericDao<T>{
private T field1;
public void save(T obj){};
public T getByid(int id){};
}
类上定义泛型,类内所用泛型都与类类型相同。

enhance43
通过反射拿到泛型的类型
通过变量自己是不能得到定义它的类型的,但可以定义一个方法,将这个变量做为参数传入

,可以通过这个方法中的方法得到参数的类型。
泛型是给编译器看的,编译完后,泛型信息就被去掉了。

??有点乱,还要再看

enhance44
类加载器:BootStrap-->ExtClassLoader-->AppClassLoader
例:
ClassLoaderTest.class.getClassLoader().getClass().getName()
查看当前文件的运行环境:当前工程-属性-Run/Debug Settings-选择class文件-edit-jar
将文件打包:选择要输出的类-右键-export-jar file-next-选择要输出的指定文件-勾选

Export generated class files and resources
类加载器的委托机制------类加载器的优先级
子类发起加载文件要交给最高级加载器加载这样做是为了避免生成多个字节码文件.

enhance45
自定义加载器,要extends ClassLoader。
覆盖findClass方法。

}

enhance46

自定义一个类加载器,还要加密:
1,定义一个类ClassLoader,extends ClassLoader
注:有包名的类不能调用无包名的类。

enhance47
protected-->受保护的方法
例:
protected Class<?> findClass(String name) throws ClassNotFoundException{
 return super.findClass(name);
??有点乱,还要再看

enhance48
Servlet加载器。

enhance49
AOP-->Aspect oriented program  面向方面的编程
代理类CGLIB可以动态生成一个类的子类。
如果你的目标库没有接口,就用CGLIB库会动态生成一个类的子类。

enhance50
Proxy类   .getProxyClass方法返回一个字节码
得到构造方法constructor

---------------------- android培训java培训、期待与您交流! ----------------------
原创粉丝点击