单行注释、多行注释、文档注释;
《Clean Code》:
代码的注释不是越详细越好,实际上好的代码就是注释,我们要尽量规范和美化自己的代码来减少不必要的注释;
若编程语言足够有表达力,就不需要注释,尽量通过代码来阐述。
程序、类、变量、方法的名字就是标识;特殊的标识符就是关键字;
在Java中,标识符是代表你对程序中某个方法或变量赋予的一个名称,而这个名称不能是关键字,因为关键字是系统已经定义并使用的,如果你拿来使用,那就会造成理解错误之类的现象,所以现在基本上语言都不允许用关键字做标识符。你指的文字是什么呢?是标识符的名称么,如果是,那要说明的是,标识符第一个字符必须是大小写字母或$或_,不能是数字和其他字符,而第一个字符以后的,可以为数字。
访问控制 | private protected public |
程序控制 | break continue return do while if else for instanceof switch case default |
类 、方法,变量修饰符 | abstract class extends final implements interface native new static strictfp synchronized transient volatile |
错误处理 | try catch throw throws finally |
包相关 | import package |
基本类型 | boolean byte char double float int long short null true false |
变量引用 | super this void |
保留字 | goto const |
自增自减运算符++、–是单目运算符,可以放在操作元之前,也可放在操作元之后。操作元必须是一个整形或浮点型变量。
++x(–x)表示在使用x之前,先使x的值增1(或减1)
x++(x–)表示在使用x之后,再使x得知增1(或减1)
break 语句可以立即退出循环,阻止再次反复执行循环代码;
continue 语句只是退出当前循环,根据控制表达式还允许继续进行下一次循环;
return 退出当前方法,终止当前方法的执行。
List list = new ArrayList<>();
list.add(12);
//这⾥直接添加会报错
list.add("a");
Class extends List> clazz = list.getClass();
Method add = clazz.getDeclaredMethod("add", Object.class);
//但是通过反射添加,是可以的
add.invoke(list, "kl");
System.out.println(list)
泛型类:
//此处T可以随便写为任意标识,常⻅的如T、E、K、V等形式的参数常⽤于表示泛型
//在实例化泛型类时,必须指定T的具体类型
public class Generic{
private T key;
public Generic(T key) {
this.key = key;
}
public T getKey(){
return key;
}
}
Generic genericInteger = new Generic(123456);
泛型接口:
public interface Generator {
public T method();
}
class GeneratorImpl implements Generator{
@Override
public T method() {
return null;
}
}
class GeneratorImpl implements Generator{
@Override
public String method() {
return "hello";
}
}
public static < E > void printArray( E[] inputArray ) {
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
// 创建不同类型数组: Integer, Double 和 Character
Integer[] intArray = { 1, 2, 3 };
String[] stringArray = { "Hello", "World" };
printArray( intArray );
printArray( stringArray );
==:基本数据类型比较值;引用数据类型比较内存地址。
equals():
public class test1 {
public static void main(String[] args) {
String a = new String("ab"); // a 为⼀个引⽤
String b = new String("ab"); // b为另⼀个引⽤,对象的内容⼀样
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 从常量池中查找
if (aa == bb) {// true
System.out.println("aa==bb");
}
if (a == b) {// false,⾮同⼀对象
System.out.println("a==b");
}
if (a.equals(b)) {// true
System.out.println("aEQb");
}
if (42 == 42.0) { // true
System.out.println("true");
}
}
如果两个对象equals()方法相等则它们的hashCode返回值一定要相同,如果两个对象的hashCode返回值相同,但它们的equals()方法不一定相等。
两个对象的hashCode()返回值相等不能判断这两个对象是相等的,但两个对象的hashcode()返回值不相等则可以判定两个对象一定不相等。
根据hashcode的规则,两个对象相等其哈希值一定相等,所以矛盾就产生了,因此重写equals一定要重写hashcode,而且从Student类重写后的hashcode方法中可以看出,重写后返回的新的哈希值与Student的两个属性有关。
以下是关于hashcode的一些规定: