7-1知识回顾

来源:互联网 发布:台湾人深圳知乎 编辑:程序博客网 时间:2024/05/18 21:49

                                学习总结

String篇

1、String长度为多少呢?

Public String s1=”aaa”;

System.out.pringtln(s1.length( ));

查询长度方法可以发现,它返回的是int类型,故其最长的长度为4个字节

2、String它不是基本数据类型,而是类类型。可以理解为char的集合,它是final类型的,即不可更改,不可继承。

3、String字符串的比较

代码:

String s1="aaa";

              String s2="aaa";

              String s3=new String("aaa");

              String s4=new String("aaa");

              System.out.println(s1==s2);

              System.out.println(s1.equals(s3));

              System.out.println(s3==s4);

结果显示:

true

true

false

结果分析:

“==”表示的是字符串地址的比较,但是JVM虚拟机在对两个值进行“==”比较时,会先在虚拟池里找是否已经存在与比较值相同的字符串,如果有,就不要创建空间来存储这个对象了。

“equals”表示的是字符串内容的比较,只要内容相同,其结果一定是正确的。如果利用new来创建字符串对象的时候,JVM是直接为对象分配空间。

 

main篇

我们都会记得一句话:程序是从主函数开始的。看主函数的定义:

public staticvoid main(String args[]);

解释:JVM虚拟机首先加载的就是主函数,因为主函数不需要在创建对象来调用,故与其他方法相区别,采用静态的方法。而其他方法则是在创建了对象的时候再加载到内存中。

 

this篇

代码如下:

publicclass Test {

       publicstatic void main(String[] args) {

              // TODO Auto-generated method stub

              Son son=new Son();

              }

}

 

publicclass Son extends Father {

       private Stringstr="son";

       public Son(){

              System.out.println("Constructor  "+this.str);

              work();

       }

       public void work(){

              System.out.println("son_work  "+str);

       }

      

}

 

publicclass Father extends GrandFather{

       private Stringstr="father";

       public Father(){

              System.out.println("Constructor  "+this.str);

              work();

       }

       public void work(){

              System.out.println("father_work  "+str);

       }

}

 

publicclass GrandFather {

       private Stringstr="grandfather";

       public GrandFather(){

              System.out.println("Constructor  "+this.str);

              work();

       }

       public void work(){

              System.out.println("grandfather_work  "+str);

       }

}

运行结果为:

1Constructor  grandfather

son_work  null

2Constructor  father

son_work  null

3Constructor  son

son_work  son

结果分析:

对于输出的1、2、3句话,可以看到在构造函数中,因为JVM虚拟机在加载构造方法时把属性也加载了,故在首先输出str的时候,输出的是grandfather,之后,在运行父类Father中的work方法时,因为子类Son重写了work方法,故先执行子类的work方法,但是此时子类的str还没有来得及加载,故显示的是空值。当然,此处的this是可以省略的,结果一样。

 

原创粉丝点击