Java核心技术Ⅰ——心得(2)
来源:互联网 发布:淘宝网用别人身份证 编辑:程序博客网 时间:2024/05/26 02:51
1.对象包装类是不可变的,一旦构造了包装器,就不允许更改包装在其中的值,同时,对象包装类是还是final,因此不能定义他们的子类。
2.ArrayLis<Integer>由于每个值都包装在对象中,所以ArrayList<Integer>的效率远远低于int[]数组,因此,应该用它构造小型集合,原因是此时程序员操作的方便性比执行效率更重要。
3.==运算符也可以应用于对象包装器对象,只不过检测的是对象是否指向同一个存储区域。例如
Integer a=1000;Integer b=1000;if(a==b)...
通常是不会成立的,如果将经常出现的值包装到同一个对象中,这种比较就有可能成立(本人不是很理解)。
4.如果在一个条件表达式中混合使用Integer和Double类型,Integer值就会拆箱,提升为double,再装箱为Double。装箱和拆箱是编译器认可的,不是虚拟机。编译器在生成类的字节码时,插入必要的方法调用,虚拟机只是执行这些字节码。
5.省略号…是Java代码的一部分,它表明这个方法可以接受任意数量的对象。
public class PrintStream{ public PrintStream printf(String fmt,Object... args) { return format(fmt,args); }}
换句话说,对于printf的实现折来说,object…参数类型与Object[]完全一样。
6.在比较两个枚举类型的值时,永远不需要调用equals,而直接使用”==”就可以。
public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};
7.枚举的toString方法能返回枚举的常量名,例如。Size.SMALL.toString()将返回字符串的“SMALL”。toString的逆方法是静态方法valueOf,例如,
Size s=Enum.valueOf(Size.class,"SMALL");
将s设置后才能Size.SMALL;每个枚举类型都有一个静态方法values方法,返回包含全部枚举值的数组。ordinal方法返回enum声明中枚举常量的位置,从0开始。
例如,MEDIUM.ordinal()返回的是1;
Size[] size=Size.values();
8.能够分析类能力的程序成为反射。
Object类中的getClass()方法将返回一个Class类型的实例,接着getName()这个方法返回类的名字,如果类在一个包里,包的名字也会作为类名的一部分。
PersonBean person=new PersonBean("wo","23","男"); System.out.print(person.getClass().getName()+"name:"+person.getName());
还可以调用静态方法forName获得类名对应的Class对象。
try { String className = "com.example.PersonBean"; Class cl = Class.forName(className); PersonBean pb = (PersonBean) cl.newInstance(); System.out.print("person:" + pb.toString()); } catch (Exception e) { e.printStackTrace(); }
这个方法只有在className是类名或者接口名才能够执行,newInstance方法将调用默认的构造器(无参)初始化创建的对象,如果没有此构造器会抛异常。
9.获得Class类对象的第三种方法,如果T是任意的Java类型(或void关键字),T.class将代表匹配的类对象。
Class cl1=Random.class;//if you import java.util.*;Class cl2=int.class;Class cl3=Double[].class;
请注意,一个Class对象实际上是表示一个类型,这个类型不一定是一种类,例如int不是类,但int.class是一个Class的对象。
10.Class类的getDeclareFields、getDeclareMethods和getDeclaredConstructors方法将分别返回类中声明的全部域,方法和构造器,其中包括私有和受保护成员,但不包括超类的成员。
System.out.println("属性域:"); printFields(personBeanClass); System.out.println("方法"); printMethods(personBeanClass); System.out.println("构造器"); printConstructors(personBeanClass); public static void printFields(Class cl) { Field[] declaredFields = cl.getDeclaredFields(); for (Field f:declaredFields) { Class type=f.getType(); String name=f.getName(); String modifiers= Modifier.toString(f.getModifiers()); if (modifiers.length()>0) { System.out.print(modifiers+" "); } System.out.println(type.getName()+" "+name); } } public static void printConstructors(Class cl) { Constructor[] constructors=cl.getConstructors(); for (Constructor c:constructors) { String name=c.getName(); String modifiers= Modifier.toString(c.getModifiers()); if (modifiers.length()>0) { System.out.print(modifiers+""); } System.out.print(name+"("); //输出参数类型 Class[] paramTypes=c.getParameterTypes(); for (int i = 0; i <paramTypes.length ; i++) { if (i>0) { System.out.print(","); System.out.print(paramTypes[i].getName()); } System.out.println(");"); } } } public static void printMethods(Class cl) { Method[] methods=cl.getDeclaredMethods(); for (Method m:methods) { Class<?> returnType = m.getReturnType(); String name = m.getName(); System.out.print(" "); String modifiers = Modifier.toString(m.getModifiers()); if (modifiers.length()>0) { System.out.print(modifiers+""); } System.out.print(returnType.getName()+" "+name+"("); Class []paramTypes=m.getParameterTypes(); for (int i = 0; i <paramTypes.length ; i++) { if (i>0) { System.out.print(","); System.out.print(paramTypes[i].getName()); } System.out.println(");"); } } }
- Java核心技术Ⅰ——心得(2)
- Java核心技术Ⅰ——心得(1)
- Java核心技术(四) —— 继承(2)
- Java核心技术笔记——数据结构(2)
- Java核心技术(六) —— 接口
- java核心技术—基础知识(1)
- 【Java核心技术——反射
- 【Java核心技术——代理】
- 【Java核心技术——泛型】
- 【Java核心技术——多线程】
- Java核心技术——集合
- Java核心技术——多线程
- Java核心技术——多态性
- Java核心技术——多线程
- Java开发核心技术面试心得分析
- [转载]Java开发核心技术面试心得分析
- Java学习强烈推荐书籍—Java核心技术Ⅰ、Ⅱ
- Java核心技术(一) —— Java程序设计概述
- 二分查找(while循环)
- Jupyter Notebook的提示与技巧
- Caffe数据层及参数设置
- git pull
- 7. Reverse Integer
- Java核心技术Ⅰ——心得(2)
- 生成模型与判别模型
- 安卓第三方分享集成
- Unity3d 4.x 自发光材质
- android button按钮阴影去除
- (洛谷 1255)数楼梯
- 我喜欢读书是因为父母的纵容
- 数据结构——字符串的基本操作
- Spark-SQL之DataFrame操作大全