文档注释
文档注释以 /** 开始,以 */ 结尾,中间部分全是文档注释,会被提取到API文档中去。
- 由于只有以public或protected修饰的内容才是希望暴露给别人使用的,因此 Javadoc 工具默认只处理public或protected修饰的类、接口、方法、属性、构造器和内部类之前的文档注释。
- 常用的javadoc标记含义
@deprecated :不推荐使用的方法
@see :“参见”,用于指定参考内容
@exception :抛出的异常类型
@author :指定Java程序的作者 - javadoc命令的使用
javadoc的常用选项:
-d < directory > :指定将生成的API文档存放的目录
-windowtitle < text > :用于设置API文档浏览器窗口标题
-doctitle < html-code > :指定一个HTML文本,用于指定概述页面标题
javadoc 选项 Java源文件名
如:javadoc -d apidoc -author -version demo // javadoc默认不会提取@author和@version,需命令指定,为demo包生成API文档
Java语言是强类型的语言
其含义是每个变量和每个表达式都有一个在编译时就确定的类型
- 如果直接将一个较小的整数常量(在byte和short类型的表述范围内)赋给一个byte和short变量,系统会自动把这个整数常量当成byte或short处理。如果使用一个巨大的整数常量(超出了int类型的表述范围)时,Java不会自动把这个整数常量当成long类型处理,而依然看作是int类型,这会出现错误!所以开发者应在这个超大的整数常量后加上 L 以表示这是个long类型。对于处理二进制数超大数时也是这样!
- 当定义32位的二进制整数时,最高位其实是符号位,当符号位为1时,表明它是一个负数,负数在计算机中以补码的形式存在,因此还需要换算成原码(补码减一,各位取反)。同理,当在二进制数后加 L 时,二进制数默认占64位,最高位符号位。其它数值类型同理可得!
// 注意坑点,补码还需转原码
int binVar3 = 0B1000_0000_0000_0000_0000_0000_0000_0011;
System.out.println(binVar3); // 输出值为:-2147483645
- Java语言默认的浮点类型是double,因此想使用float类型,要在数值后加F,只有浮点类型数值才可以用科学计数法,例如51200是一个int型,而512E2是一个浮点型。
- 三个特殊的浮点类型:正无穷大、负无穷大、非数(NaN),用于表示溢出或出错。正无穷大通过Double或Float的POSITIVE_INFINITY表示,负无穷大NEGATIVE_INFINITY,非数NaN。
// 注意坑点,浮点 0.0 与 整数 0 做除数上的区别
double a = 0.0;
double c = Double.NEGATIVE_INFINITY;
float d = Float.NEGATIVE_INFINITY;
System.out.println(c==d); // 两个(负)正无穷相等,true
System.out.println(a / a); // NaN
System.out.println(6.0 / 0); // 正无穷大
System.out.println(6 / 0); // ArithmeticException: / by zero
System.out.println(a / a == Float.NaN); //两个NaN不相等,false
- boolean类型的取值只能是true和false,不能用0或者非0来代表,其他基本数据类型也不能转换成boolean类型。
// 注意坑点,不能用0或者非0来代表boolean型
while(1){ // Error:cannot convert from int to boolean
...
}
- 隐式类型转换
- 表达式类型自动提升
(1)所有的type类型、short类型和char类型都被提升到int类型
(2)整个表达式的数据类型自动提升到最高的数据类型
// 注意坑点,表达式类型自动提升
short sValue = 5;
sValue = sValue - 2; // Error:cannot convert from int to boolean
- 直接量
直接量是指在程序中通过源代码直接指定的值,例如 int a = 5; 5就是一个直接量。并不是所有数据类型都可以指定直接量,能指定直接量的类型通常只有3中类型:基本类型、字符串类型、null类型(null类型的直接量只有null,并且这个直接量可以赋值给任何引用类型)。 - 常量池
常量池(constant pool)指的是在编译期间被确定,并保存在已编译的.class文件的一些数据,它包括关于类、方法、接口中的常量,也包括字符串直接量。当程序第一次使用某一个字符串直接量时,Java会使用常量池来缓存该字符串直接量。后序再使用时,Java会直接使用常量池中的字符串。
// 注意坑点,使用new和使用字符串直接量的区别
String a = "HelloWorld";
String b = "HelloWorld";
String s1 = new String("HelloWorld");
System.out.println(a == b); //true
System.out.println(a == s1); //false
- 基本类型的变量、值不能和引用类型的变量、值使用 == 进行比较;boolean类型的变量不能和其它任何类型的变量、值使用 == 进行比较。如果两个引用类型之间没有继承关系,那么它们的变量也不能使用 == 进行比较。
流程控制与数组
- switch语句后的表达式的数据类型只能是byte、short、char、int、enum 五种。
- foreach语句的循环变量相当于一个临时变量,系统会自动把数组元素一次赋给这个临时变量,而这个临时变量并不是数组元素,它只是保存了数组元素的值,因此,如果希望改变数组元素的值,则不要使用foreach循环。
for(int temp : arrays){ // temp只是个临时的变量
...
}
-
为什么会有堆内存和栈内存之分?
当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法里定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁。因此,所有在方法中定义的局部变量都是放在栈内存中的;当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为创建对象的成本较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量引用(在方法的参数传递时很常见),则这个对象依然不会被销毁。只有当一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会在合适的时候回收它。 -
操作数组的工具类
(1) import java.util.Arrays
int binarySearch(type[] a, type key); //使用二分查找key在数组a中的索引,要求数组已经升序排列
int binarySearch(type[] a, int fromIndex, int toIndex, type key);
type[] copyOf(type[] original, int newLength); //从original复制length个元素,组成新数组
type[] copyOfRange(type[] original, int from, int to);
boolean equals(type[] a, type[] a2); // a、b数组长度相等,并且元素位置一致,且值相同,则为true
void fill(type[] a, type val); //将数组中的每一个元素都赋值为val
void fill(type[] a, int fromIndex, int toIndex, type val);
void sort(type[] a);
void sort(type[] a, int fromIndex, int toIndex);
String toString(type[] a);
(2)System类中的数组操作
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
// 注意坑点一,boolean equals(type[] a, type[] a2); 考虑了元素的位置
// 注意坑点二,== 对于比较两个引用类型的变量时,比较的是在堆中的存储地址
// 注意坑点三,不得不再提一下,常量池的存在,上面已经叙述的很清楚了,回顾一下!
int[] a = {1,2,3,4};
int[] b = {1,2,3,4};
int[] c = {1,2,4,3};
System.out.println(Arrays.equals(a, b)); // true
System.out.println(Arrays.equals(a, c)); // false
System.out.println(a == b); //false
System.out.println(a.equals(b)); //false
- == 操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
== 比较的是2个对象的地址,而equals比较的是2个对象的内容。
所谓迷茫,就是你的才华还配不上你的梦想