准备工作
1、先下载JDK,安装,然后把JDK安装路径下的bin目录复制,如“E:\软件安装路径\Java\jdk7\bin”,然后window XP中右击“我的电脑”→“属性”→“高级”→“环境变量”→“新建”,粘贴bin的路径上去,变量名为path,保存。在“开始”→“运行”中输入cmd,回车,输入java -version回车,可看到JDK的版本信息。
2、使用Eclipse时设置代码自动提示:window → Preferences → Java → Editor→ Content Assist → 设置最下面的Auto Activation,设置为100ms以内,triggers for Java的空格写入“abcdefghijklmnopqrstuvwxyz.”
3、Eclipse 1.5版本很多东西都不支持,编译文件需要使用1.6或以上版本,如下设置:window → Preferences → Java → Compiler,设置Compiler compliance level为1.6或以上版本
4、如果代码文件应为“.java”后缀,如果文件名为test.java,在cmd上先定位到文件目录,然后输入“javac test.java”回车就开始编译,再输入“java test”就开始执行。
5、第一个程序Hello World
public class FirstSample{
public static void main(String[] args){
System.out.println(“Hello World”);
}
}
Java的原生数据类型
1、整形 int 32位; 2、短整型 short 16位; 3、长整型 long 64位
4、字节型 byte 8位 5、单精度浮点型 float 6、双精度浮点型 double
7、字符型 char 8、布尔型 boolean 只有true和false 如boolean abc = true;
小数常量默认为double类型
变量在使用前必须先赋值,必须定义数据类型,变量在只能定义一次
使用final声明常量,如:final double PAI = 3.1415,在类中如果希望某个常量可以在一个类中的多个方法中使用(类常量),可以如下声明:
public class Test{
public static void main(String[] args){ }
public static final double PAI = 3.1415;
}
数组
1、可以使用两种形式声明数组1、int[] a; 2、int a[]; 应使用new创建数组:int[] a = new int[100]
2、可以:int[] smallPrimes = {2,3,5,7,11,13};
3、可以:smallPrimes = new int[]{17,19,23}; //这样等于是重新初始化了一个数组
4、可以使用array.length来获得数组元素的个数,如:a.length
5、可以使用Arrays类的copyOf方法将一个数组的所有值拷贝到新数组中,如:
int[] b = Arrays.copyOf(a, a.length); //此方法通常用来增加数组的大小
6、可以使用Arrays类的sort方法对数组元素进行排序,如:Arrays.sort(a);
Java允许数组长度为0
Java允许讲一个数组变量拷贝给另一个数组变量,这时,两个变量将引用同一个数组
数组的下标从0~99,一旦创建了数组,就不能再改变它的大小,如果需要经常在运行程序中扩展数组的大小,应该使用“数组列表(array list)”
Java中的[]运算符被预定义为检查数组边界,没有指针运算,即不能通过a加1得到数组的下一个元素
数组是动态生成的,也就是说可以:int n = 5; int[] a = new int[n];
7、二维数组:int[][] a = new int[2][3];或者int[][] a = { {1,2,3}, {4,5,6}, {1,3,5} };
for each循环语句不能自动处理二维数组的每一个元素,需要如下做:
for(int[] row : a)
for(int value : row)
{ //待执行语句; }
8、Java可以创建不规则数组
① 对于a[][]来说,a[i]引用第i个子数组,它本身类似一个数组的指针,所以可以如下交换数组的两行:
int[] temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
② 构造“不规则”数组,即数组的每一行有不同的长度,如:
int[][] odds = new int[8][];
for(int n = 0; n < 8; ++n)
odds[n] = new int[n+1];
在分配了数组后,只要没有超出边界就可以采用通常的方式(a[i][j])访问其中的元素
强制类型转换
1、变量 = (变量类型)值; 如:float a = (float)1.23;
2、使用java支持,数字后面加f或者F表示float类型的,加L表示long类型的;如:float a = 1.23f;
3、十六进制数值前有0x作为前缀,八进制有一个0作为前缀;如0xCAFE87,010;
字符串
1、加号可以用于两个字符串相加,非字符串会看成字符串,如:
message = “first”+”second”,此时message = “firstsecond”
message = “first”+ 4,此时message = “first4”
2、Java中的String类型和C语言不一样,它不像C语言那样认为字符串是字符型数组,如:str = “hello”,要把ch修改为helxy的话,需要str = str.substring(0,3)+”xy”,这是因为编译器可以让字符串共享,在比较字符串时可以得到更满意的效率,而很少会去修改字符串
3、str1.equals(str2)或str1.compareTo(str2)用来比较两个字符串str1,str2,相等返回true,不等返回false,str1.equalsIgnoreCase(str2)会忽略大小写来进行比较,不要用 = = 号来比较两个字符串
4、当需要用许多小段的字符串构建一个字符串时,使用StringBuilder类会更好。如:
StringBuilder builder = new StringBuilder();
builder.append("aa");
builder.append("bb");
String str = builder.toString(); //此时str为“aabb”
运算符
数值运算符
加法+,减法-,乘法*,除法/,求余%。
大于>,小于<,等于==,大于等于>=,小于等于<=,不等于!=
加等于+=,减等于-=,乘*=,除等于/=,求余等于%=
自加++,自减--,和C语言的一样
除法运算得到的结果的数据类型和运算中范围最大的那个变量的类型
求余运算得到的结果的正负和 % 左边的数的正负相同,如-5 % 3 = -2;-5 / 3 = -1
关系运算符的结果是boolean值
逻辑运算符
与 &&,或 ||
使用a && b时,当a为假,b的表达式就忽略掉
使用a || b时,当a为真,b的表达式就忽略掉
位运算符
相与 & ,如a & b,表示a与b对应位相与,得到结果
异或 ^ ,如a ^ b,表示a与b对应位相异或,得到结果
取反 ~ ,如 ~ a , 表示把a的每一位取反,得到结果
右移>> ,如a>>3 ,表示把a的二进制位右移三位,高位补上原来的高位
左移<< ,如a<<4 ,表示把a的二进制位左移四位,低位补零
右移>>>,如a>>>3,表示把a的二进制位右移三位,高位补零
条件运算符
变量 = 布尔值或表达式?值1:值2,当布尔值为true时运算符表达式返回值1,否则返回值2,如int a = b<c ? 3 : 4 ;
流程控制语句
1、if(布尔表达式) { 语句; }
else if(布尔表达式) { 语句; }
else { 语句; }
2、switch(变量) {
case 常量1: 代码块;
break;
case 常量2: 代码块;
break;
default: 代码块;
}
如果case后面没有break语句的话就会把后面的case都执行
switch后面的变量必须是“整数”或者“枚举常量”
3、while(布尔表达式){
待执行代码;
}
4、do{
待执行代码;
}while(布尔表达式); //这个分号必须有
当布尔表达式为true时就执行一次里面的代码
5、for(初始化; 条件判断; 步进或语句){
待执行代码;
}
for循环里当条件判断为true时执行里面的代码
当待执行代码里执行了break语句时会跳出循环
当待执行代码里执行了continue语句会直接跳到该循环的 } 位置,跳过一次循环
break和continue都是只作用于其所在的循环,不影响到外层循环
6、for(变量 : collection){
待执行代码;
}
定义一个变量用来暂存集合中的每一个元素,并执行相应的语句块(collection必须是一个数组或者一个实现了Iterable接口的类对象),如:
for(int element : a){ System.out.println(element); }//打印数组a的每一个元素
//打印数组中所有值的另外一个方法:System.out.println(Arrays.toString(a));
7、带标签的break和continue语句
标签必须放在希望跳出的循环(或者任意块)之前,并且必须紧跟一个冒号,如:
int n;
read_data:
while(...){
for(...){
if(...) break read_data;(或者continue read_data;)
}
} ·← read_data标签指示的块的末尾在这里
如果满足跳转的条件,则break会使程序跳转到带标签的语句块末尾,应该在块后面加上检测是否正常结束的判断
格式化输入输出
1、通过控制台进行输入,首先需要构造一个Scanner对象,并与标准输入流System.in关联:Scanner in = Scanner(System.in); 下面就可以使用Scanner类的各种方法实现输入操作了,如nextLine()、nextInt()等(注:Scanner类定义在java.util包中,所以在程序最开始需要添加一句:import java.util.*; 更详细的在《Java核心技术·卷I》52页
2、Java沿用了C语言中printf方法,例如System.out.printf(“Hello,%s.Next year is %d”,name,year); 更详细的在《Java核心技术·卷I》54页
块作用域
用{ }来表示一个块,块可以嵌套,不能在嵌套的两个块中声明同名的变量
大数值运算
如果基本的整数和浮点数不能满足需求,可以使用java.math包中的BigInteger类(实现任意精度的整数运算)和BigDecimal类(实现任意精度的浮点数运算)来实现,这两个类可以处理含任意长度的数字序列的数值
注释
1、// 其后面的内容都当做注释处理
2、/* */ 其中间的内容都当做注释处理
3、/** */ 其中间的内容用于产生Java Doc帮助文档
注意事项
1、Java对大小写敏感
2、浮点数值不适用于禁止出现舍入误差的金融计算中,如2.0-1.1 = 0.899999...,需要使用BigDecimal类
3、boolean类型的值true和false和1,0不是相互等价的,所以if(1){ }是错的,这样可以防止if(x = 0){ }这样的低级错误
4、Java中变量的声明可以放在代码的任意地方
5、在比较两个浮点数是否相等时要格外小心,如for(double x = 0; x != 10; x += 0.1){ }可能永远不会结束
犯的错误
1、在类中直接编写System.out.println(a); 由于只有函数才能调用函数,println函数本身是一个函数,要放在函数里面才能使用,放在class下是有语法错误的。