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引用调用另外一个构造函数,但是该调用只能在构造函数中调用一次,而且必须放在该构造函数的第一行。
原文链接
以上笔记,如有错误请指正
- Java语言基础(一)
- Java语言基础(一)
- 一、java语言基础
- Java语言基础一
- Java语言基础(一)
- JAVA基础(一)java语言基础
- java语言基础(一)
- Java语言基础(一)
- Java语言基础(一)
- Java 语言基础(一)
- Java语言基础简介(一)
- Java---模块一:语言基础
- Java的语言基础(一)
- Java语言基础(一)
- Java学习笔记(一、Java语言基础)
- [黑马程序员]--Java语言基础一
- Java核心编程一:语言基础
- java 语言基础组成(一)
- AKKA Cluster 原理及实战
- LintCode 第452题 删除链表中的元素
- 利用反射类定位php的函数定义的物理位置
- Java嵌入式数据库H2学习总结(一)——H2数据库入门
- python十个实战项目
- Java语言基础一
- 电路与电子学基础学习笔记
- 观察者模式(java版)
- SPSS——非参数检验——1-Sample K-S 单个样本(Kolmogorov-Smirnov)柯尔莫哥洛夫-斯米诺夫检验
- Android网络编程(六)OkHttp3用法全解析
- 数据结构-二叉排序树BST初探
- 生活中的英语 —— 动植物篇
- 《bootstrap用户手册》读书笔记(3)
- 互联网安全防御之道