疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java面向对象值得注意的地方


 

       Java面向对象注意点

       1、内存解析:

  (a)栈内存定义:存放基本类型和引用类型变量;

  优点:存放速度快,数据由常量池(.Class文件)管理,当变量超过它的作用域,此时会被释放,用作其它内存的存放。

  缺点:生命周期较短,是静态内存分配

  (b)堆内存:存放对象和数组

  优点:存放方式灵活,是动态内存分配。

  (c)栈内存存放的是基本类型和引用类型,如:String s;int a=3;int b=3;(存放在.class文件里面);

  堆内存存放的是对象和数组,如:new出来的东西,不管堆内存之前里面有没有存在那个值都会重新再开辟一个新的空间。

  package xzp;

  publicclass Test3 {

  String s1="1";

  String s2="1";

  String s3=new String("1");

  String s4=new String("1");

  void fun(){

  if(s1==s2){

  System.out.println(123);

  }

  if(s3==s4){

  System.out.println(12);

  }

  if(s1==s4){

  System.out.println(2);

  }

  }

  publicstaticvoid main(String[] args) {

  Test3 t=new Test3();

  t.fun();

  }

  }

  运行的结果:123

  有上面结果说明其它的if都不满足,有栈内存的定义来看String s1;是引用类型是存放在栈内存,栈内存是指向同一个值,所以第一个if满足条件,输出123,其他的if里面的String s3=new String("1");是属于实例化对象,根据定义是存放在堆内存中所以是指向不同的空间对象,即不能直接用“==”来判断是否相等,假如把第二个if改为:

  if(s3.equals(s4)){

  System.out.println(12);

  }

  就可以输出:12

  总结上面:由此看出,栈内村存放的是基本类型,在判断是否相等时候用“==”号,堆内存存放的是对象和数组(new出来的东西),在判断是否相等时会用“equals关键字”。

  This关键字:

  (a)表示类中的属性。

  (b)可以使用this调用本类的构造方法。

  (c)表示当前对象。

  举例:

  package xzp;

  publicclass Leaf {

  inti=0;

  Leaf(int i){this.i=i;}//指向的是成员变量i

  Leaf increament(){

  i++;

  returnthis;//调用本类的构造方法

  }

  void print(){

  System.out.println("i="+i);

  }

  publicstaticvoid main(String[]args){

  Leaf leaf=new Leaf(100);

  leaf.increament().increament().print();

  }

  }

  运行结果为102。