第一章:概述
jdk,jre,ide概念辨析
1.jdk是什么?里面有什么东西?
jdk,英文全名是java development kit(java开发工具包)。它是工具程序和文档的集合。它是面向开发人员的。
2. jdk里面的东西有什么用?
2.1 java工具:
javac.exe(编译器):将源程序(.java文件)转成字节码.class文件。
java.exe(解释器):运行编译.claa文件。
jdb.exe(调试器):查错工具
jar.exe(打包工具):将相关的类文件打包成一个文件
javadoc.exe(文档生成器):从源码注释中提取文档
appletviewer.exe(小程序浏览器):一种执行HTML文件上的Java小程序的Java浏览器。
2.2 java基础类库(jar包):
java.lang: 这个是系统的基础类,比如String等都是这里面的,这个包是唯一一个可以不用引入(import)就可以使用的包。
java.io: 这里面是所有输入输出有关的类,比如文件操作等。
java.nio:为了完善io包中的功能,提高io包中性能而写的一个新包 ,例如NIO非堵塞应用: 这里面是与网络有关的类,比如URL,URLConnection等。
java.util: 这个是系统辅助类,特别是集合类Collection,List,Map等。
java.sql: 这个是数据库操作的类,Connection, Statement,ResultSet等。
javax.servlet:这个是JSP,Servlet等使用到的类。
3.jre是什么?有什么用?
jre的英文全称是java runtime environment(java运行时环境),它包含了JVM(java虚拟机),java基础类库和支持文件。它是面向使用者的。它是.class文件的运行平台。
4.jdk和jre之间有什么关系?
安装jdk时,就会附带安装jre,你可以认为jre是jdk(java开发工具包)中的一部分。
5.ide是什么?有什么用?
ide英文全称是integreted development environment(集成开发环境)。
在这个集成开发环境下,我们可以更方便地组织和管理自己写的代码(工作空间+资源管理器)
JAVA 类加载过程详细讲解
第二章:基础程序设计
- 有两种类型的import语句:明确导入和通配符导入。明确导入是在import语句中指定导入单个类;通配符导入将包中所有的类导入。
- 除非要在程序中使用某个类,否则关于被导入包中的这些类的信息在编译时或运行时是不被读入的。导入语句只是告诉编译器在什么地方能找到这些类。声明明确导入和声明通配符导入在性能上是没有什么差别的。
- 不能跨行
- 标识符必须以字母、下划线或美元符号开头,不能以数字开头。可以为任意长度
- i=j=k=1 等价于 k=1;j=k;i=j
- 命名常量格式如下。需要注意的是,常量必须在同一条语句中声明和赋值
final datatype CONSTANTNAME = value;
- 整型直接量默认类型为int型,范围-2^31(-2 147 483 648) ~ 2^31 - 1(2 147 483 647)。如果要表示long型直接量,需要在数字后加上l或L。
- java允许数值直接量的两个数字间使用下划线,如下所示。 需要注意的是,45_和_45是不正确的。下划线必须置于两个数字间
long ssn = 232_45_4549;
long creditcardnumber=2324_4545_4519_3456
增强赋值操作符
- 增强赋值操作符在表达式中所有其他操作符计算完成后执行。
- 增强赋值操作符中间是没有空格的。
- java中,x1 op = x2 形式的增强赋值表达式,执行为x1 = (T)(x1 op x2),这里T是x1的类型。因此下面的代码是正确的
int sum = 0;
sum += 4.5;//sum = 4;
自增和自减
用几行代码来表示它们的机制及用法
int i = 1;
int k = i + ++i;//k=3
System.out.println(k);
i = 1;
k = i + i++;//k=2
System.out.println(k);
i = 1;
k = i++ + i;//k=3
System.out.println(k);
i = 1;
k = ++i + i;//k=4
System.out.println(k);
数值类型转换
- java自动拓展类型,但是缩窄类型必须显式完成。
- 类型转换不改变原操作数的值。
- 将一个int型变量赋值给short和byte型变量时,必须显式类型转换。
- 将一个整形直接量赋值给short和byte型变量时,只要执行直接量在目标变量允许的范围内,就不需要显式类型转换。
- x1 op = x2 形式的增强赋值表达式,执行为x1 = (T)(x1 op x2),这里T是x1的类型。
- boolean类型和int类型不能进行强制类型转换。下面代码是错误的
boolean b = true;
int i = (int)b;//错误
i=1;
b = (boolean)i;//错误
第三章:选择
浮点数的相等测试
浮点数因为精度有限,所以直接用等号判断其相等并不可靠。如下所示
double x = 1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1;
System.out.println(x==0.5);
通常下,我们认为这个输出为true,但事实上输出为false。
我们可以通过判断两个数的差距小于某个阈值,判断他们是否足够接近。通常,比较两个double类型的值时,阈值为10-14,比较两个float类型的值时,阈值为10-7
下面是一个正确判断的例子
final double EPSILON = 1E-14;
double x = 1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1;
if(Math.abs(x-0.5) < EPSILON)
System.out.println(x + " is approximately 0.5");