直接定义的类型的值 是存在常量区域中的
例如:
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 class Demo1 { public static void main(String[] args) throws ClassNotFoundException { //获取Class类对象的四种方法 //1、 Object obj=new String(); 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(new InputStreamReader(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(); }
心得:三个小训练的痛苦远远没有失败的那一刻难受