本文参考韩顺平老师的笔记,罗列了一些个重点、常见的知识点,并且补充了一些细节性的知识点,形成了本章笔记。
目录
细节
a%b=a-a/b*b;
计算机中存储的是补码,输出的是源码
二进制(bin):0b巴拉巴拉;
八进制(oct):0巴拉巴拉;
十六进制(hex):0x巴拉巴拉;
十进制(dec):巴拉巴拉;
1900年1月1日是星期一
若要使对象可比较,要实现Comparable接口并重写compareTo方法
注意:String的compareT是比较第一个不同字母的差值,或者长度
定制排序时new的是Comparator实现的是compare方法
import java.util.Scanner
java输入
Scanner myScanner=new Scanner(Syestem.in)
myScanner.nextInt();//输入整形
myScanner.next().charAt(0);//输入字符
Myscanner.next()//输入字符串
获取当前日期:
Date date = new Date();//获取当前日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化对象
System.out.println(formatter.format(date)); //调用format方法传入当前日期对象
泛型<E>可以用在参数类型和返回值类型,但不能直接用来创建对象或数组(因为大小E大小未知,无法确定分配内存的大小)
泛型方法:
public<U,M> void eat(U u, M m) { }方法使用泛型:public void hi(T t) { }Array的排序是Array.sort()
Collections类数据结构可以用Collection.sort()或者 temp.sort()
里面可以放匿名内部类:new comparetor(){compare} 或者lambda表达式(a,b){}
访问权限
继承
super可以调用父类的构造器,属性和方法
多态
在对应父类子类中也构成覆盖
string
append
append追加
finalize
关于调试
static
当一个方法是static时,就是静态方法,可以直接通过类名调用
创建对象、用static属性时会类加载,final修饰该属性可以防止加载
接口
接口里的是抽象方法(抽象类里不一定是抽象方法)、还可以用default和static关键字修饰
子类拓展功能:class son implement interface{重写抽象方法}
A a=new A(){。。。}其中A是接口,这个不是实例化接口,它有{},重写了A中方法,(有时也用lambda函数 interface A{double getvalue()} A a; a=()->123.5 )相当于有一个隐含的类实现了A这个接口并且创建了一个对象,用其父类(A)作为其编译类型(多态)相当于class B implemens A{...} A a=new B()
抽象类内什么都可以有,因为它本质就是一个类,抽象方法需要用abstract声明,而接口里不需要声明,默认方法就是abstract的,变量就是static final的
抽象类和接口都不能被final,static,private修饰,因为他需要重写方法的。final的作用就是防止类被继承,防止方法被重写,防止变量被修改,防止类加载
内部类
局部内部类(成员方法中定义)
匿名内部类(参数中new重写)
成员内部类(类的成员位置定义)
静态内部类(有static修饰的成员内部类)
枚举类
枚举类若调用无参构造器,则小括号可以省略
枚举对象必须放在最前面
Annotation注解Deprecated过时的Suppress压制@interface为注解类
异常处理
关于assert
- assert主要用在测试和调试时,用于方便知道哪里出错了(提供断言信息assert bool:"此处错误")
- assert抛出的是错误(程序本身不能处理),不能用捕获异常(程序员导致,可以避免)的try-catch捕获
文件操作
构建文件的三种方法:
常用方法:
字节流是操作二进制文件,字符流是操作文本文件
new FileInputStream和FileOutputStream(file或path,true(表示追加))
read(没有参数就是返回下一个字符的ASCII,有byte[]就返回实际读取到的字节数)
write(byte[](可str.getBytes()),0,len(实际需要写的)):有就写/读,没有返回-1
最后一定要close或者flush,否则写不进去
用input时,只有file.createnewfile()才会真的创建文件,而output会自动创建
FileReader和FileWriter与上面类似:
BufferReader/Writer 不要用于操作二进制文件
读取每一行存入String:
BufferedReader reader=new BufferedReader(new FileReader(path));
str=reader.readLine():扩展了 ,可以按行读取,当读完就返回null,最后关闭外层流 (BufferedReader)就好,没有读取换行符。
BufferredWriter writer=new BufferredWriter(new FileWriter(path))
writer.newLine()可以插入换行符。
自动装箱拆箱
Integer转int:integer.intValue()
int转integer:new integer(int)、Integer.valueOf(int)
三元运算符可能会提升精度
可以将integer和int看成是一样的东西
随机数
Random random = new Random();
System.out.println("Method two:" + random.nextInt(100));//返回[0,100)的随机数
Math.random()//返回[0,1)的随机数,相当于random.nextdouble(1)
因为random返回的是【0,1),故要返回【0,6)+2->【2,8)
即a+random()*(b-a+1)
Array类
Arraylist的复制是clone()
BigInteger(BigDecimal)
List类
迭代器
Collection类数据结构特有的方法,当然还可以用for 来遍历
ArrayList(队列)
arraylist.trimToSize()可以将容量缩小到实际尺寸
arraylist.clone()可以克隆一个新的实例
LinkedList
Hashset
set.toArray()可以将set转为数组