1.Java语言的特点
Java语言的特点:简单性 、面向对象、安全性、跨平台性、支持多线程、分布性
2.JDK的使用
JDK(Java Development Kit)包括Java编译器、Java运行工具、Java文档生成工具、Java打包工具等,是开发java程序的最小环境。
JRE(Java Runtime Environment)只包含Java运行工具,不包含Java编译工具,是运行java程序的最小环境。
JDK中封装了一个JRE,即开发环境中包含运行环境,只需要安装JDK即可。
JDK目录:
(1)bin:存放一些可执行程序,如javac.exe、java.exe。
javac.exe:Java编译器,可以将编写好的Java文件编译成Java字节码文件(编译期)。Java源文件的拓展名是.java,字节码文件的拓展名是.class。
java.exe:Java运行工具,会启动一个Java虚拟机(JVM)进程,运行Java编译器生成的字节码文件(运行期)。
(2)jre:Java程序运行时的环境,包含Java虚拟机、运行时的类包、Java应用启动器和一个bin目录,不包含开发环境中的开发工具。
(3)include:存放C语言的头文件。
3.开发Java程序的步骤
1.编写源文件;
2.Java编译器编译并生成字节码文件;
3.Java虚拟机运行程序。类加载器先将编译好的字节码文件加载到内存(类加载),然后由Java虚拟机对加载到内存中的Java类进行解释执行。
注意:
Java语言中的运行机制是半编译半解释型。
字节码文件是与平台无关的二进制码,执行时由编译器而非操作系统解释成本地机器码,由此实现Java程序的跨平台性。
Java程序可以实现跨平台,但Java虚拟机不行,即不同操作系统上的Java虚拟机是不同的。
4.包的定义与使用
Java引入包(package)机制,程序可以通过声明包的方式对Java类分目录管理。
包通过package关键字声明,注意:包的声明只能位于Java源文件的第一行。
使用import关键字导入某个指定包下的类,import通常出现在package语句之后,类定义之前。如果需要用到一个包中的多个类,可以使用"import 包名.*"导入该包下所有的类。
注意:如果使用import语句引入了整个包中的类,可能会增加编译时间,但不会影响程序运行的性能,因为当程序执行时,只是将真正使用的类的字节码文件加载到内存。
5.Java基本语法
Java程序代码必须放在一个类中。类使用class关键字定义,class前可以有类的修饰符,格式如下:
修饰符 class 类名{
程序代码
}
Java程序代码可分为结构定义语句和功能执行语句。结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能。
注意:Java程序中一个连续的字符串不能分成两行书写,例如:
System.out.println("这是第一个
Java程序");
可以将长字符串分成两个短字符串,用"+"相连,修改成:
System.out.println("这是第一个"+
"Java程序");
Java中的标识符可以由字母(区分字母的大小写)、数字、下划线(_)、美元符号($)组成,但不能以数字开头,不能是Java中的关键字。变量名可以用汉字表示,但不建议。
注意:const和goto是保留字关键字,虽然在Java中没有意义,但不能作为自定义标识符。
为了增强代码可读性,应遵循以下规则:
(1)包名的所有字母一律小写;
(2)类名和接口名的每个字母的首字母都要大写,如ArrayList;
(3)常量名的所有字母都要大写,单词之间用下划线连接,如DAY_OF_MONTH;
(4)变量名和方法名的第一个单词首字母小写,第二个单词开始每个单词首字母大写,如lineNumber。
6.Java中的数据类型
常量:整型常量、浮点型常量、字符常量、字符串常量、布尔常量、null常量
变量:程序运行期间产生的临时数据会被保存在内存单元中,每个内存单元都有一个标识符,即变量。内存单元中存储的数据就是变量的值。
Java中变量的数据类型分为基本数据类型和引用数据类型。
基本数据类型是Java语言内嵌的,任何操作系统中都具有相同的大小和属性。
注意:Java使用Unicode字符码系统,为每个字符制定了唯一数值,每个Unicode码占16个比特。
数据类型转换可分为自动类型转换(隐式类型转换)和强制类型转换(显式类型转换)。
自动类型转换需同时满足:数据类型彼此兼容,目标类型的取值范围大于原类型的取值范围(占用内存空间小的可以转换成占用内存空间大的),如:
byte b = 3;
int x = b;
当两种数据类型之间的转换无法满足以上两个条件之一时,需要强制类型转换,如:
byte a;
int b = 298;
a = (byte)b;
注意:强制类型转换容易造成数据精度丢失。
变量在表达式中进行运算时,可能发生自动类型转换,即表达式类型自动提升,如:
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
该程序会报错,因为表达式b1+b2运算期间,变量b1、b2被自动提升成int类型,表达式运算结果也变成int类型,无法赋给byte类型的变量b3。
可通过强制类型转换解决表达式类型自动提升,如改为:
byte b3 = (byte) (b1 + b2) ;
7.数组
Java中声明数组的方式有以下两种,其本身没有任何区别:
数据类型[] 数组名 = null;
数据类型[] 数组名;
数组名 = new 数据类型[长度];
第一行代码声明一个变量,该变量会占用一块内存单元,但没有被分配初始值。
第二行代码创建了一个数组,将数组的地址赋给该变量。
注意:
如果数组创建后数组元素没有被赋值,则会被自动赋予默认的初始值。元素类型的不同,默认初始值也不同。
Java中数组的元素可以是简单数据类型的量,也可以是某一类的对象。
数组中的每个元素都具有相同的类型。
程序运行中不可以改变数组的大小。
数组作为方法的参数时,必须在数组名后加方括号。
动态初始化:定义数组时只指定数组长度,由系统自动为元素赋初值。
静态初始化:定义数组时为数组的每个元素赋值,如:
类型 [] 数组名 = new 类型[]{元素,元素,...};
类型 [] 数组名 = {元素,元素,...};
注意:不能写成如"int[] x = new int[4]{1,2,3,4};"的格式,因为编译器会认为数组中限定的元素个数[4]与实际存储的元素个数{1,2,3,4}可能不一致。
注意:在使用变量引用一个数组时,变量必须指向一个有效的数组对象。如果该变量的值为null。则意味着没有指向任何数组,此时通过变量访问数组的元素会出现空指针异常,如:
int[] arr = new int[3];
arr[0] = 5;
System.out.println(arr[0]);
arr = null;
System.out.println(arr[0]);
运行后第一行输出正常,第二行则出现空指针异常"NullPointerException"。
多维数组可以理解为数组里嵌套数组,即数组的元素是一个数组。
二维数组的定义方式有如下三种:
数据类型[][] 数组名 = new 数据类型[行的个数][列的个数];
数据类型[][] 数组名 = new 数据类型[行的个数][];
数据类型[][] 数组名 = {{第0行初始值},{第1行初始值},...,{第n行初始值}};
二维数组的遍历,举例如下:
int[][] arr = new int[3][];
arr[0] = new int[] {11,12};
arr[1] = new int[] {21,22,23};
arr[2] = new int[] {31,32,33,34};
for(int i = 0; i < arr.length; i++){
...
for(int j = 0; j < arr[i].length; j++){
...
}
...
}
注意:Java中提供了length属性(而非length()方法),通过"数组名.length"可获得数组的长度。
数组的复制
int[] array2 = array1.clone();
System.arraycopy(array1,0,array2,0,array1.length);
注意:法二可以实现部分复制。
8.Java中的运算符
注意:在使用+=、-=、*=、/=、%=进行赋值时会自动完成强制类型转换,如:
short s = 3;
int i = 5;
s += i;
虽然s和i相加的运算结果是int类型,但通过运算符+=赋值给变量s时,会自动转换成short类型。
9.方法
方法是一段可以重复调用的代码,有些地方也称为函数,Java中的定义格式如下:
修饰符 返回值类型 方法名 (参数类型 参数名1,参数类型 参数名2,...){
执行语句;
...
return 返回值;
}
方法的修饰符有:对访问权限进行限定的修饰符、static修饰符、final修饰符等。
注意:方法的返回值类型必须是方法声明的返回值类型。如果方法没有返回值,返回值类型要声明为void,此时方法中return语句可以省略。
方法重载是在一个作用域内方法名相同但参数个数或参数类型不同的方法,如:
public static int add(int x,int y){
return x + y;
}
public static int add(int x,int y,int z){
return x + y + z;
}
public static double add(double x,double y){
return x + y;
}
调用add()方法时通过传入不同的参数就可以确定调用哪个重载的方法。
注意:方法的重载与返回类型无关。
其他注意点
一个程序可以包含多个源文件,一个源文件可以提供多个程序使用,一个Java源文件中可以有多个类,但只能有一个类是public的。
如果Java源文件中包含了多个类,那么用编译器编译完源文件后将生成多个扩展名为.class的字节码文件。
Java程序中必须要有main方法,main方法可以保证Java程序独立运行。
设置path的作用是指定命令搜索路径,设置CLASSPATH的作用是指定类搜索路径。