直接定义的类型的值 是存在常量区域中的
例如:
int a="1";
String str="hello"; 与 String str=new String("str");的区别:
前者的值hello是存在常量区域中的 后者会先去静态区域查看是否有"hello"这个变量
如果有则直接将hello拿到堆里来指向str 如果没有这个值 则会自己定义一个在常量区域中 然后再拿到
堆里面来再指向str
String.equals():
Object中的equals方法是比较两者的内存地址 但是 String类中重写了equals 方法 String 类中的
equals 方法 会将两个字符串变成 两个char类型的数组 然后再去对比两个char类型数组的值是否相等
所以说 Object中的equals方法等价于==,String的equals方法比较的是值是否相等
java反射机制主要功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象?
3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法)
4.在运行时调用任意一个对象的方法
获取Class类对象的方法 源码:
public classDemo1 {public static void main(String[] args) throwsClassNotFoundException {//获取Class类对象的四种方法//1、
Object obj=newString();
System.out.println("obj.getClass():"+obj.getClass());//2、
System.out.println("String.class:"+ String.class);//3、
System.out.println("Class.forName(\"java.lang.String\"):"+(Class.forName("java.lang.String")));//4、
System.out.println("ClassLoader.getSystemClassLoader():"+ClassLoader.getSystemClassLoader().loadClass("java.util.ArrayList"));
}
}
随意输入一个类 输出他的父类 源码:
BufferedReader br = new BufferedReader(newInputStreamReader(System.in));try{
System.out.print("输入任意类的名字:");
String className=br.readLine();
String xx=className.getClass().getName();
Class cls=Class.forName(xx);//循环打印父类信息,直到没有父类
while (cls != null) {
System.out.println(cls);
cls=cls.getSuperclass();
}
}catch(IOException e) {
e.printStackTrace();
}catch(ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
心得:三个小训练的痛苦远远没有失败的那一刻难受