Chinaunix首页 | 论坛 | 博客
  • 博客访问: 68822
  • 博文数量: 12
  • 博客积分: 1656
  • 博客等级: 上尉
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-22 15:16
文章分类

全部博文(12)

文章存档

2012年(10)

2009年(1)

2008年(1)

我的朋友

分类: Java

2012-09-24 22:57:39


点击(此处)折叠或打开

  1. IDE -- integrity development environment
  2. jdk1.5新特性
  3. 1.静态导入 import static java.util.Math.*;
  4. 2.可变参数
  5. 特点:1.只能出现在参数列表的最后
  6. 2./.../位于变量类型和变量名之间,前后无空格都可以
  7. 3.调用可变参数方法时,jdk隐含创建一个数组,在方法体中
  8. 以数组的形式来访问可变参数
  9. overload(重载) vs override(重写)
  10. 3.for循环增强
  11. for( type 变量名 : 集合变量名){...}
  12. 》迭代变量必须在()中定义
  13. 》集合变量可以使数组或实现了iterable接口的集合类
  14. 4.自动装箱、拆箱
  15. Integer in = new Integer(3) 1.5之前必须要这样
  16. Integer in = 3; 1.5开始可以这样
  17. System.out.println(in + 4); //拆箱
  18. 装箱 -128~127之间的数 在第一次装箱时缓存起来,称为享元模式flyweight
  19. Integer i1 = 12;
  20. Integer i2 = 12;
  21. System.out.println(i1 == i2); //true
  22. Integer i1 = 125;
  23. Integer i2 = 125;
  24. System.out.println(i1 == i2 ); //false
  25. 享元模式:对于小的对象,有很多相同的东西,变为一个对象
  26. 不同的属性作为方法的参数,称为外部状态
  27. Integer i1 = Integer.valueOf(2);
  28. Integer i2 = Integer.valueOf(2);
  29. System.out.println(i1 == i2); //true
  30. 5.枚举
  31. 编译阶段可以发现问题;
  32. 枚举类中元素列表必须在第一行;静态的成员变量
  33. 构造方法必须是私有的private WeekDay(){默认调用这个} private WeekDay(int day)
  34. public enum WeedDay(){
  35. SUN(1),MON(),TUE,WED,THR,FRI,SAT;
  36. private WeedDay(){}
  37. private WeedDay(int day){}
  38. }
  39. 抽象方法
  40. public enum TrafficLamp{
  41. RED{
  42. public TrafficLamp nextLamp(){return GREEN;}
  43. },
  44. GREED(40){return YELLOW;},
  45. YELLOW{};
  46. public abstract TrafficLamp nextLamp();
  47. private int time;
  48. private TrafficLamp(int time){this.time = time;}
  49. }
  50. 如果枚举只有一个成员时,就可以作为一种单例的实现方式
  51. 6.反射 java1.2就有,非1.5新特性
  52. Class-->是用于描述众多java类的类,它的实例对象就代表字节码
  53. Person p1 = new Person();
  54. class cls1 = Person.class
  55. 1.p1.getClass(); 返回字节码的三种方式
  56. 2.System.class
  57. 3.Class.forName("java.lang.String");返回字节码,分两种,1.已经加载2.未加载
  58. 8个基本类型都有对应的class对象,Class cls1 = void.class
  59. 内存中只有一份字节码 isPrimitive()是否是基本类型
  60. int.class == Integer.class //false
  61. int.class == Integer.TYPE //true所包装的基本类型的字节码
  62. int[].class.isPrimitive() //false
  63. int[].class.isArray() //判断是否是数组
  64. 总之,只要是在源程序中出现的类型,都有各自的Class实例对象
  65. 反射就是把java类中的各种成分映射成为相应的java类;
  66. Constructor类代表某个类的一个构造方法
  67. Constructor[] constructors = Class.forName("java.lang.String").getConstructors();
  68. Constructor constructor = Class.forName("StringBuffer").getConstructor();
  69. 获得某个特定的构造方法
  70. String.class.getConstructor(StringBuffer.class);//只接受一个参数的构造方法;这个方法利用了新特性可变参数
  71. 通常方式:String str = new String(new StringBuffer("abc"));
  72. 反射方式: Constructor constructor = String.class.getConstructor(new StringBuffer("abc"));
  73. String str = (String)constructor.newInstance(new StringBuffer("abc"));
  74. 反射会导致性能下降,
  75. class.newInstance
  76. ReflectPoint pt1 = new ReflectPoint(3,5);
  77. Field fieldY = pt1.getClass().getField("y");
  78. System.out.println(fieldY.get(pt1));//此get只能返回public 的
  79. Field fieldX = pt1.getClass().getDeclaredField("x"); //返回private的
  80. fieldX.setAccessible(true); //暴力反射
  81. System.out.println(fieldX.get(pt1));
  82. 成员变量的反射案例
  83. public class ReflectPoint{
  84. private int x;
  85. public int y;
  86. public String str1 = "ball";
  87. public String str2 = "basketball";
  88. public String str3 = "itcast";
  89. public ReflectPoint(int x,int y){
  90. super();
  91. this.x = x;
  92. this.y = y;
  93. }
  94. public
  95. }
  96. public class test{
  97. private static void changeStringValue(Object obj) throws Exception{
  98. Field[] fields = obj.getClass().getFiedlds();
  99. for(Field field : fields){
  100. if(field.getType() == String.class){
  101. String oldvalue = (String)field.get(obj);
  102. String newvalue = oldvalue.replace('b','a');
  103. field.set(obj,newvalue);
  104. }
  105. }
  106. }
  107. }
  108. 方法的反射
  109. import java.lang.reflect.Method;
  110. public class ReflectTest {
  111. public static void main(String[] args) throws Exception {
  112. String str1 = new String(new StringBuffer("abc"));
  113. //调用str1的charAt(1)
  114. Method methodCharAt = String.class.getMethod("charAt", int.class);
  115. System.out.println(methodCharAt.invoke(str1, 1)); //专家模式//反射方式
  116. System.out.println(str1.charAt(1));//通常方式
  117. }
  118. }
  119. new Object[]{new String("abc"),1}
  120. 反射方式执行某个类中的main方法
  121. mainMethod.invoke(null,new Object[]{new String[]{"xxx"}});
  122. mainMethod.invoke(null,(Object)new String[]{"xxx"});编译器不把参数当做数组对待,
  123. 数组的反射
  124. int [] a1 = new int[3];
  125. int [] a2 = new int[4];
  126. int [][] a3 = new int[2][3];
  127. String [] a4 = new String[]{"a","b","c"};
  128. System.out.println(a1.getClass() == a2.getClass());
  129. //System.out.println(a1.getClass() == a4.getClass());
  130. //System.out.println(a1.getClass() == a3.getClass());
  131. System.out.println(a1.getClass().getName());
  132. System.out.println(a1.getClass().getSuperclass().getName());
  133. System.out.println(a4.getClass().getSuperclass().getName());
  134. Object aObj1 = a1;
  135. Object aObj2 = a4;
  136. //Object aObj3 = a1;
  137. Object[] aObj4 = a3;
  138. Object[] aObj5 = a4;
  139. System.out.println(a1);
  140. System.out.println(a4);
  141. System.out.println(Arrays.asList(a1));
  142. System.out.println(Arrays.asList(a4));

阅读(676) | 评论(0) | 转发(0) |
0

上一篇:ubuntu上python2.7安装mysqldb

下一篇:没有了

给主人留下些什么吧!~~