Java学习手册:Java基础知识点(不断扩充更新中)

1、Java中的程序代码可以分为结构定义语句功能执行语句

2、Java程序中一句连续的字符串不能分开在两行书写。如果为了方便阅读,想将一个太长的字符串分在两行书写,可以先将这个字符串分为两个字符串,然后用加号(+)将这两个字符串连起来,在加号(+)处断行

System.out.println("这是第一个"+
		"Java程序");

3、文档注释:文档注释是以/*开头,并在注释内容末尾以/结束。文档注释是一段代码概括性的解释说明,可以使用javadoc命令将文档注释提取出来生成帮助文档。

4、Java命名规则
(1)包名所有字母一律小写。
(2)类名和接口名每个单词的首字母要大写。
(3)常量名所有字母都大写,单词之间用下划线连接。
(4)变量名和方法名的第一个单词首字母小写,从第2个单词开始,每个单词首字母大写。(驼峰命名法)

5、在进行取模(%)运算时,运算结果的正负取决于被取模(%左边的数)的符号,与模数(%右边的数)无关。
例:(-5) % 3 = -2, 5 % (-3) = 2

6、Static关键字
①由static修饰的变量称为静态变量,也称类变量。
②静态变量定义位置在所有方法之外。
③静态变量与静态方法都是在类从磁盘加载至内存后被创建,与类同时存在,同时消亡。
④静态变量又称类的成员变量,在类中是全局变量,可以被类中的所有方法调用。
⑤静态变量的值由JVM自动初始化
整型→0,布尔型→false,浮点型→0.0,字符串型→null,字符型→Unicode编码为0的字符(该字符不可见)

7、JRE(Java运行环境):为Java运行提供运行时环境,包括JVM和Java系统类库。
JDK(Java虚拟机):JDK除了包含JRE之外,还包含开发Java程序所需要的一些命令、工具。
运行一个Java程序所需的最小环境为JRE,开发一个Java程序所需的最小环境为JDK

8、Java Scanner类中next()与nextLine()的区别
(1)next()
①一定要读取到有效字符之后才可以结束输入
②对输入有效字符之前遇到的空白,next()方法会自动将其去掉
③只有输入有效字符后才将其后面输入的空白作为分隔符或结束符
④next()不能得到带有空格的字符串
(2)nextLine()
①以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
②可以获得空白

9、String类型的值不可变(字符串内容不可更改)

public class StringDemo{
	public static void main(String[] args){
		String s1 = "Hello";
		String s2 = s1 + "World!";
		System.out.println(s2);
	}
}
//程序输出结果如下:
Hello World!

对于上述程序进行内存分析:
Java学习手册:Java基础知识点(不断扩充更新中)

10、整数相除结果为整,小数部分无条件舍去(不四舍五入)。
算术运算时,整个结果为最大类型。
正数溢出变为负,负数溢出变为正。

11、int
①int类型范围不够,可使用long型。
②如果要表示long直接量,需要以L或l结尾。

int d = 10000000000;//编译错误,因为整数直接量超过整数范围
//10000000000这个数值写出来就是错误的,因为Java认为所有直接写出的整型都是int类型,而这个数值超过了int的表达范围
//直接量(literal):就是直接写出来的数,整数的直接量默认为int类型。
long d = 10000000000;//错误
long d = 10000000000L;//正确

12、double
①double常用于浮点数
②double无法精确表示1/10,会出现舍入误差

double b1 = 6;
double b2 = 5.9;
System.out.println(b1-b2);
//输出结果如下:
0.099...964

③小数的直接量为double类型
④float类型表示需加“f”或“F”

13、char
①char为字符类型,用于存储单个字符,‘a’,‘王’,‘克’
②char采用Unicode字符编码,实际存储的是字符所对应的编码(16位整数)

char ch = 'a';
System.out.println(ch);//赋值为字符
//程序输出结果为:a
char ch1 = 97;//赋值为整数
System.out.println(ch1);
//程序输出结果为:a
char ch2 = '97';//错误,两个字符

③字符的直接量放在单括号中’ ’
④’a’→97,‘A’→65,‘0’→48,’\n’表示回车,’\r’表示换行符
⑤转义字符:将特殊字符非特殊化,’\‘表示(\),’\“'表示(")

14、boolean
①boolean只能取值true或false(默认false)
②boolean一般用于存储关系运算的结果,常用于条件控制
③在Java中,布尔值和整数不能相互转换
问题:boolean类型占据多少字节?
答案:作为数组中某元素时,boolean类型占据1个字节(8bit);作为单个变量存储数据时,boolean类型占据4个字节(32bit)。

15、在使用+=,-=,*=,/=,%=运算符进行赋值时,强制类型转换会自动完成,程序不需要做任何显示的声明。

16、取余(%) 只能用于整数以及char类型。
注意:与例5的取模(%)运算略有差别,原因是:取模运算(“Modulo Operation”)和取余运算(“Complementation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。

17、在JDK7.0中,switch语句的表达式增加了对字符串类型的支持。

switch(整型表达式){
	case (int/char类型):
		语句1;
		语句2;
		break;
}

18、do…while

do{
	语句块;
}while(boolean表达式);
//1、先执行语句块
//2、再计算boolean表达式的值,若为true,再次执行语句块,知道boolean值为false为止
//3、无论boolean表达式是否为true,都先执行一次语句块
注意:while(boolean表达式);最后面的分号一定要有!!!

19、Java在处理基本数据类型(例如int、char、double等)时,都是采用按值传递(传递的是输入参数的复制)的方式执行,除此之外的其他类型都是按引用传递(传递的是对象的一个引用)的方式执行。

20、深复制与浅复制的区别
浅复制(Shallow Clone):被复制对象的所有变量都含有与原来对象相同的值,而所有对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制(Deep Clone):被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制的新对象。而不再是原有的那些被引用的对象。换言之,深复制把复制的对象所引用的对象都复制了一遍。
以下例所示:

class Test{
	public int i;
	public StringBuffer s;
}

Java学习手册:Java基础知识点(不断扩充更新中)
21、for循环
①三个表达式都可以省略,但分号不能省略,示例:for( ;;)
②表达式1、3可用逗号形式(当多条语句时),但2不可以,表达式2中不能有“,”(逗号),若有多个条件,可用(&&)或(||)连接。

22、默认值
基本类型数组创建后,元素是有默认值的:byte、short、int、long、char为0,而float和double为0.0,boolean默认值为false。
数组new之后,元素也有默认值。

23、数组的排序
JDK提供了Arrays.sort()方法封装了数组的排序算法。Arrays.sort()用的是快速排序。

package com.haobi;

import java.util.Arrays;
/*
 * Arrays.sort()的使用
 */
public class Test {
	public static void main(String[] args) {
		int[] arr = {49,45,65,21,37};
		Arrays.sort(arr);
		for(int i=0;i<arr.length;i++) {
			if(i == arr.length-1) {
				System.out.print(arr[i]);				
			}else {
				System.out.print(arr[i] + " ");
			}
		}
	}
}
//程序输出结果如下:
21 37 45 49 65

24、字符串与数字的相互转化

//1、将数字转换为字符串
int num = 5;
String s = String.valueOf(num);
//结果:s="5";

//2、将字符串转换为数字
String s = "55";
int num = Integer.parseInt(s);
//结果:num=55;

25、匿名对象
匿名对象就是没有名字的对象,如果程序中只是用一次该对象,就可以使用匿名对象的方式。

package com.haobi;
/*
 * 匿名对象
 */
class Student{
	public void tell() {
		System.out.println("Hello");
	}
}
public class Test1 {
	public static void main(String[] args) {
		new Student().tell();
	}
}
//程序输出结果如下:
Hello