本文共 2988 字,大约阅读时间需要 9 分钟。
public class MylTest { public static void main(String[] args) { // TODO Auto-generated method stub Sub sub = new Sub(); } }
public class Sub extends Parent { public static Tipout SUB_TIP = new Tipout("子类 static 成员 SUB_TIP 初始化"); Tipout subTip = new Tipout("子类 成员 subTip 初始化"); public Sub() { System.out.println("子类 构造函数 调用"); }}
public class Parent { static Tipout TIP = new Tipout("父类 static 成员 TIP 初始化"); Tipout tip = new Tipout("父类 成员 tip 初始化"); public Parent() { System.out.println("父类 构造函数 调用"); } }
public class Tipout { public Tipout(String s) { System.out.println(s); } }执行结果:
public class Parent { public static Tipout TIP = new Tipout("父类 static 成员 TIP 初始化"); static { System.out.println("父类 static 代码块"); } Tipout tip = new Tipout("父类 成员 tip 初始化"); public Parent() { System.out.println("父类 构造函数 调用"); } public static void outMsg(){ System.out.println("父类 static 函数 调用"); } }在Main()中调用:Parent.TIP.toString(); 结果:
2.3.1Java 把内存划分成两种: 1.栈内存, 基本类型的变量和对象的引用变量(存取速度比堆要快,仅次于寄存器) 2.堆内存。 堆内存用来存放由 new 创建的对象和数组。 !类跟数组一样,都是属于引用类型,引用类型就是指一堆对内存可以同时被多个栈内存指向。 java中主要存在4块内存空间: 栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址) 堆内存空间:保存每个对象的具体属性内容。 全局数据区:保存static类型的属性。 全局代码区:保存所有的方法定义。 2.3.2 String缓冲池 缓冲池是java为了节省内存空间,会在内存中创建一个专门为String设计的缓冲池,用来保存已经存在的字符串, 如果2个字符串是一样的,则使用池中的字符串,不再创建新的对象 用下边的代码测试: String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); //true 结果为true,说明str1和str2指向同一个对象 String str1 =new String ("abc"); String str2 =new String ("abc"); System.out.println(str1==str2); // false 用new则在堆中创建了2个对象
for(int i=0;i应该改为
for(int i=0,len=list.size();i并且在循环中应该避免使用复杂的表达式,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。
for (int i = 0; i < 10000; i++) { Object obj = new Object(); }
for (int i = 0; i < 10000; i++) { Object obj = new Object(); }
虽然性能上差别不大,但这样的代码会浪费栈内存空间,上边提到过引用变量会存放在栈内存,这样会在内存中产生大量的对象引用。
应该写成下边的:
Object obj; for (int i = 0; i < 10000; i++) { obj = new Object(); }