Java语言基础一

来源:互联网 发布:wkwebview js调用原生 编辑:程序博客网 时间:2024/05/16 09:41

1,  Java没有指针,只有引用,引用本质上也是指针,是不可计算的指针。

public classAssignment {   public static void main(String[] args) {      Numbern1 = new Number();      Numbern2 = new Number();      n1.i = 9;      n2.i = 10;      System.out.println("n1.i:" +n1.i + ",n2.i:"+ n2.i);      n1 = n2;      System.out.println("n1.i:" +n1.i + ",n2.i:"+ n2.i);      n1.i = 20;      System.out.println("n1.i:" +n1.i + ",n2.i:"+ n2.i);   }}class Number {   public int i;}


以上输出结果为

n1.i:9,n2.i:10

n1.i:10,n2.i:10

n1.i:20,n2.i:20

Java的对象必须都通过new关键字进行初始化,没有想C++那样分为初始化对象和初始化对象指针。

Java的对象创建后生成一块内存区域,并把地址赋给n1,n2。通过n1 = n2赋值操作,使应用n1指向n2的地址,原本的n1对象成为垃圾,将被垃圾回收器回收。

2,  在C/C++的世界里函数的参数分为形参和实参,Java中没有该定义,所有的参数都是实参分为基础类型和引用类型。

public classPassObject {   public static void main(String args[]){      Letterletter= newLetter();      letter.c ='a';System.out.println("letter.c:" +letter.c);      f(letter);      System.out.println("letter.c:"+letter.c);   }   static void f(Letter letter){      letter.c ='z';   }}class Letter{   char c;}


以上输出结果为

letter.c:a

letter.c:z

因为f函数参数中的letter为main函数中创建的Letter对象的引用,在f函数内部获取的letter.c就是在main函数中创建的对象,所有对letter.c的改变同样会影响到f函数外面来。和C++不一样,C++中该写法会在f函数内部创建一个Letter的拷贝对象,在函数内部的操作不会影响到函数外面的值。

3,   Java对象的比较,通过==比较的是指针的比较

public staticvoidmain(String args[]){      Integern1 = new Integer(1);      Integern2 = new Integer(1);      System.out.println("n1 == n2:"+(n1 ==n2));      System.out.println("n1.equals(n2):"+n1.equals(n2));      Integern3 = 127;      Integern4 = 127;      System.out.println("n3 == n4:"+(n3 ==n4));      Integern5 = 128;      Integern6 = 128;      System.out.println("n5 == n6:"+(n5 ==n6));   }}


以上输出

n1 == n2:false

n1.equals(n2):true

n3 == n4:true

n5 == n6:false

如果比较Integer两个对象大小需要调用Integer的equals来比较,对于n3和n4的比较,java虚拟机会在内存中保留0-127的基础类型数据,n3和n4实际上没有创建新的对象,而是赋值为内存保留的数据对象的引用。所以n3,n4为同一个引用,而n5和n6是通过新建对象获得新对象引用,Java虚拟机这样为基础类型保留一定量的数据是为了提升效率。

4,   Java没有goto语句,但是替代为命名for,通过break和continue 标签; 直接跳转到外层循环

public classLabelsFor {   public static void main(String args[]){      outter:      for(inti = 0;i < 4;i++){         inner:         for(intj = 0;j < 10;j++){            if(j > 1){                break inner;            }            if(i == 2){                continue outter;            }            System.out.println("i/j:"+i+"/"+j);                    }      }   }}


以上输出

i/j:0/0

i/j:0/1

i/j:1/0

i/j:1/1

i/j:3/0

i/j:3/1

5,  Java对象和C++一样有初始化函数,但是Java函数没有析构函数,因为Java对象是通过垃圾回收机制来释放对象内存,而不是手动释放。

6,  和C++一样Java内部也有this关键字,表示调用该函数的对象引用

7,  Java构造函数可重载,并且在一个构造函数内部可以通过this引用调用另外一个构造函数,但是该调用只能在构造函数中调用一次,而且必须放在该构造函数的第一行。



原文链接


以上笔记,如有错误请指正


2 0
原创粉丝点击