java语言注意事项_Java基础知识中的注意事项

设置Java的相关路径,举例:

JAVA_HOME  -->   C:\Program Files\Java\jdk1.8.0_191

Path    --->   C:\Program Files\Java\jdk1.8.0_191\bin

Java有编译型语言的特点,也有解释性语言的特点。在编写Java代码的时候,和编译型语言一样,需要指定变量的数据类型。而编写完的Java代码,经过编译之后,并不是生成在操作系统上直接运行的程序,而是生成一个字节码文件,该文件在虚拟机(JVM)中执行,而JVM就类似于其他语言的解析器(比如php、python的解析器),从这点来看,Java也包含动态语言的特点。

所以“Java是静态编译型语言”这一说法也不完全正确

Java使用16位的Unicode字符集作为编码方式,也就是说,Java的一个字符char占2个字节,而一个byte占1个字节,Java的byte相当于C/C++中char类型。

其他语言中,无论什么数除以0,都会报错,并且抛出异常。

而在Java中,浮点数可以除以0,如果是正浮点数除以0,结果是无穷大;负浮点数除以0,结果是无穷小;重点是不报错。只有当使用整数除以0的时候,在编译阶段也不会报错,只是会在运行的时候才报错。

在Java中,Double和Float类都有POSITIVE_INFINITY和NEGATIVE_INFINITY两个属性值分别表示正无穷大和负无穷大。并且Double的正无穷和Float的正无穷相等(负无穷也一样相等)

Java的类型自动转换和强制类型转换需要注意:

1、自动类型转换时,小类型向大类型转换时,可以成功,不会出现问题;大类型转换为小类型时,因为java认为这样会存在精度损失,所以会报错。

2、大类型自动转换为小类型失败,可以使用强制类型转换,这样就不会报错了。、

3、进行强制转换时,有个例外,不能将其他类型强制转换为boolean类型。也不能将boolean类型强制转换为其他类型。

"+"号有两大功能,一个是进行算术运算,另一个就是字符串拼接。

有时候,这种情况表面上看来很像是字符串拼接,然而,它其实是算术运算:(char类型可以自动转换为int):

//注意下面这个表达式都是算术运算,而不是字符串拼接

3 + '4' + 5 == 60

'3' + '4' == 55

而字符串拼接,一个很重要的标识就是双引号。

另外,字符串拼接的时候,注意从左到右,一旦出现字符串,注意这里说的是字符串,一定是双引号括起来的字符串。一旦出现字符串后,之后就不会再进行算术运算了,只会进行最简单拼接操作,当然,如果使用括号来改变优先级还是可以的。

System.out.println(5 + 6 + "hello"); //11hello

System.out.println(5 + '6' + "hello");//59hello

System.out.println(5 + "hello" + 6); //5hello6

System.out.println("hello" + 5 + 6); //hello56

Java语言的if选择结构,后面的判断表达式必须是boolean值,或者结果是boolean类型的值。不能是其他类型的值,因为前面已经说了,Java中的其他类型不能转换为boolean类型,即使是强制转换也不行。所以下面这个用法是错的:

int a = 5;

if (a) {

System.out.println("eeee");

}

//报错信息如下:

//错误: 不兼容的类型: int无法转换为boolean

而switch却刚好和if条件表达式相反,switch的判断表达式可以是数字、字符串String类型的变量或者表达式,注意不能是字面值常量。

在创建数组的时候,通过new关键字指定数组长度来动态初始化(未指定每一个元素的确定值),此时,有两种情况:

1、如果数组元素的类型是基本数据类型(number类型),那么在动态初始化后,各数组元素值为类型零值(byte、short、int->0,float、double->0.0,char->''),在动态初始化后可以直接使用数组元素。

2、如果数组元素的类型是引用类型,比如String,其他Class。那么使用new关键字动态初始化后,在未指定每个元素的确定值时,默认的零值是null。所以,此时不能直接访问数组元素的某一个属性,因为null没有属性。

double[] dArr = new double[4];

// 0.0 0.0 0.0 0.0

int[] iArr = new int[4];

// 0 0 0 0

String[] sArr = new String[4];

// null null null null

Person[] pArr = new Person[4];

// null null null null

System.out.println(sArr[0].length());

// 报错Exception in thread "main" java.lang.NullPointerException

System.out.println(pArr[0].age);

// 也会报错Exception in thread "main" java.lang.NullPointerException

sArr[0] = "hello world";

System.out.println(sArr[0].length);

//输出11

所以,如果数组元素类型是引用类型的时候,不要尝试在未赋初始值的时候使用该元素。

在Java中,如果只是定义了一个局部变量,但是没有为该局部变量赋值的话,那么访问该局部变量就会出错。比如下面的错误示例:

int i;

System.out.println(i);

int[] arr;

System.out.println(arr.length);

String s;

System.out.println(s);

Person p;

System.out.println(p.name);

所有的报错信息如下:

Test.java:19: 错误: 可能尚未初始化变量i

System.out.println(i);

^

Test.java:22: 错误: 可能尚未初始化变量arr

System.out.println(arr.length);

^

Test.java:25: 错误: 可能尚未初始化变量s

System.out.println(s);

^

Test.java:28: 错误: 可能尚未初始化变量p

System.out.println(p.name);

^

在定义局部变量后,在显式的初始化之后访问才不会出错。这是一个很容易忽略的问题,因为有些语言中,对于定义的局部变量,如果没有显式的初始化,那么就会变量的值就是该类型的零值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值