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);
^在定义局部变量后,在显式的初始化之后访问才不会出错。这是一个很容易忽略的问题,因为有些语言中,对于定义的局部变量,如果没有显式的初始化,那么就会变量的值就是该类型的零值。
Java基础知识中的注意事项的更多相关文章
- java基础知识-新手上路注意事项一
1.文件名,类名,字节码文件名三者的关系 源文件名:Demo.java 类名:Demo 字节码文件名:Demo.class 2.如果class定义前,加上public修饰,说明这是一个公共类,此时类名 ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 【Java面试题系列】:Java基础知识常见面试题汇总 第一篇
文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定 ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
随机推荐
- BSOJ 2423 -- 【PA2014】Final Zarowki
Description 有n个房间和n盏灯,你需要在每个房间里放入一盏灯.每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照亮. 你可以去附近的商店换新灯泡,商店里所有正整数功率的灯 ...
- (9)Python循环结构
- 泰泽智能电视(Tizen smart TV)问世
6月2日至4日,泰泽开发人员大会(TDC)在美国洛杉矶举行,会上韓国三星公司展出了一台泰泽智能电视(原型机). 智能电视(Smart TV not to be confused ...
- Scala 上下文界定
上下文界定的类型参数形式为T:M的形式,其中M是一个泛型,这种形式要求存在一个M[T]类型的隐式值: /** * 上下文界定 */ @Test def testOrdering_Class_Conte ...
- 【转】一个域名是用哪里的DNS来解析的,电脑怎么知道找哪一个DNS呢? 我注册域名的时候会在服务商那里配置DNS解析,一般需要24小时后才能访问,我想知道,解析后的这个数据是不是会同步到世界上所有的DNS服务器呢!如果不是,当我访问我的这个域名的时候,电脑怎么知道去找到我注册的这一家的DNS服务器呢,谁告诉他的呢?
看看DNS一些基础知识,你就了解了.1.DNS就是域名服务器,他的任务就是确定域名的解析,比如A记录MX记录等等. 2.任何域名都至少有一个DNS,一般是2个.为什么要2个以上呢?因为DNS可以轮回处 ...
- spring-batch批处理框架
转自 http://www.cnblogs.com/gulvzhe/archive/2011/10/21/2220260.html 这个框架没有实际操作,只是从同事处学习到,先转个好文章,以后有机会再 ...
- 六大主流开源SQL引擎
导读 本文涵盖了6个开源领导者:Hive.Impala.Spark SQL.Drill.HAWQ 以及Presto,还加上Calcite.Kylin.Phoenix.Tajo 和Trafodion.以 ...
- PAT A1132 Cut Integer (20 分)——数学题
Cutting an integer means to cut a K digits lone integer Z into two integers of (K/2) digits long int ...
- Python脱产8期 Day02
一 语言分类 机器语言,汇编语言,高级语言(编译和解释) 二 环境变量 1.配置环境变量不是必须的2.配置环境变量的目的:为终端提供执行环境 三Python代码执行的方式 1交互式:.控制台直接编写运 ...
- TerraGate软件安装后,服务无法启动的解决方法
前些天有朋友问,TerraGate安装后,服务无法启动,而且启动按钮也是不可用的状态,不知道是为什么,如下图: 打开TerraGate的安装目录,发现里面缺少一些文件,如下图: *解决办法: 重新安装 ...