使用Java能编写哪些类型的程序?试举至少两个例子。
- 可以编写桌面应用程序,例如简易图片浏览器。
- Web运用程序,例如早期的电商网站。可以正常显示内容,保存操作记录,并且背后处理这些逻辑的“后台程序”。
Java号称“一次编译、处处运行”(Write Once, Run Anywhere!),怎么理解这句话?为使编译好的程序能运行,需先在操作系统安装什么?
- 每个不同的操作系统都对应着不同的JVM(虚拟机),需要通过javac将源文件编译成字节码文件,这样子字节码文件就可以在不同系统中通过虚拟机进行解释,只要在合适对应的运行环境JRE下就可以运行。
- 因此需要在操作系统中安装好对应的JRE,其中JRE就包含了JVM。
对比c版本的与Java版本HelloWorld代码,有何不同?
以下是C语言的代码:
int main(){printf("Hello World!");return 0;
}
以下是java的代码:
public class Hello{public static void main(String[]args){System.out.println("Hello World!");}
}
- 可以看出,C语言通过main方法实现了输出Hello World! ,而Java语言当中有类,默认的命令行参数数组,以及类是私有还是公共之分。
- C语言是面向过程的语言,Java是面向对象的语言,System就是其中的一个类,out就是对象,println是调用的方法。
- 再者,java语言要注意大小写之分,C语言就比较少。
怎么比较两个字符串内容是否相同?可以直接用吗?为什么对基本数据类型可以直接使用?对引用数据类型不行?
首先,我们可以看以下代码
String x1=new String("123");
String x4=new String("123");
String x2="123";
String x3="123";
- String 属于引用数据类型,通过第一行在堆内存new了一块新空间,存放对象x1。第二行new了新空间给对象x2,他们对象的内容虽然相同,但是指向的是两个不同的对象。
- x2,x3,存储在字符串常量池中,因为池子中已经有了一个123,x3就会直接指向123。
- 若要比较内容是否相同,需要用到x1.equals(x2);因为==比较的是地址,地址不一样无法比较,对于引用数据类型就不能直接用。而基本数据类型本身就是内容本身。
下面这段代码,本意是要达到什么效果?能运行成功吗?为什么?怎么获得String的trim()方法的说明?
String x = null;
int length = x.length();
System.out.println("x.length = "+length +", content = "+x.trim());
本意是想获得字符串X的长度并去除空白字符,不能运行成功,因为null表示没有引用任何对象,会出现空指针异常。
可以通过IDE的帮助功能获得方法说明。
阅读下列代码
Integer x = Integer.valueOf("10");
Integer y = x + 1;
int z = x + y;
x是Integer类型,1是int类型,为什么他们可以相加,使用了什么技术?z是int,x与y是Integer类型,却可以直接将x + y 赋给z,使用了什么技术?
- Integer 是引用类型,通过自动拆箱将其转化为基本数据类型int,相加之后自动装箱,就可以完成第二行。
- 通过自动拆箱将x,y变为基本数据类型,进行相加,因为z是基本数据类型,无需再装箱,直接将相加后的值赋给z就可以了。