写在前面:
作为一名刚刚入门Java的小白,在学习了Typora的基本用法之后,就迫不及待的把原来乱糟糟的笔记转移到优美的Typora上。。。以下是整理了本人三个月以来学习的JavaSE的部分基础知识,希望能够给同样刚刚学习Java的朋友带来一点帮助,由于能力有限,文中出现的错误,还希望大家能够指出。=-=。
JavaSE基础知识梳理
一、 数据类型
1 基本类型
基本类型 | 大小 |
---|---|
int | 4字节 |
short | 2字节 |
byte | 1字节 |
long | 8字节 |
float | 4字节 |
double | 8字节 |
char | uncertain |
2 引用类型
- 自动装箱和自动拆箱发生在编译阶段
引用类型 | 构造方法 |
---|---|
Integer | new Integer(int value)\Integer.valueOf |
Short | new Short(short value)\Short.valueOf |
Byte | new Byte(byte value)\Byte.valueOf |
Long | new Long(long value)\Long.valueOf |
Float | new Float(float value)\Float.valueOf |
Double | new Double\Double.valueOf |
Charactor | new Charactor\Charactor.valueOf |
2.1 数值类型常用方法
Integer,Double,Float,Short,Long,Byte 等类似
//静态方法
int Integer.parseInt(String s);//转换为int类型
Integer Integer.valueOf(String s or int i);//装箱
int Integer.compare(int x,int y);//比较两个数,返回-1或0或1;
String Integer.toHexString(int i);//转换为16进制的字符串
String Integer.toBinaryString();//转换为2进制的字符串
//实例方法
boolean equals(Object obj); //引用类型的数值比较用equals
int compareTo(Integer anotherInteger);
byte byteValue();
int intValue();//转为等等类型的值
2.2 Charactor类常用方法
//各种boolean方法判断是否是某种类型的字符
//静态方法
Character.isDigit(char ch);
Character.isLetter(char ch);
Character.isLetter(char ch);
Character.isSpaceChar(char ch);
//实例方法
int compareTo(Character another);//返回0,-1,1
char charValue();
3 String类
- 字符串类型不是基本类型,java通过封装char[]数组构建了字符串String类型,所有的""都默认为String类型
3.1 String类的常用方法
//静态方法
String.join(src,target);//用src去填充target,返回连接的结果
String.valueOf(int\double\...)//构造String类型字符串
String.copyValueOf(Charsequence c)//复制一个,返回复制的String结果
//实例方法
int length();//计算长度
boolean equals(String another);//比较内容是否相同
char[] toCharArray();//返回char数组
int compareTo(String another);//按字母顺序比较,返回-1,0,1
char charAt(int index);//返回在index处的char
byte[] getBytes();//转为字节数组,可以指定编码集
String substring(int from,int end);//获取子串,不包含end
String[] split(String regex);//以正则表达式regex分割成String[]数组
String replace(CharSequence old,CharSequence new);//替换
boolean contains(String s);
int indexOf(String s);//返回s第一次出现的索引
boolean startsWith(String s);
boolean endsWith(String s);
String concat(Charsequence c1,Charsequence c2);//拼接字符串
String trim();//去除首尾的空格
boolean equalsIgnorecases()//忽略大小写比较
3.2 String类的常见坑
比较字符串 | new String(char[] array,Charset charset)创建新的一个对象,两个new出来的String比较是比较内存地址,肯定不同两个不同的String s1,s2引用同一个字符串"good",字符串存储在常量池中,因此两个对象比较的时候是相同的 |
---|---|
比如 |
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
String s1 = "good";
String s2 = new String("good"); //尽管s1和s2的地址不同,但是s1和s2的内容相同,在contains判断的时候只判断是否有内容
list.add(s1);
System.out.println(list.contains(s2));
}
4 StringBuilder类
4.1 StringBuilder常用方法
StringBuilder与StringBuffer区别在于前者是非线程安全,后者线程安全,但效率较低
相对于String每次拼接都会在常量池中新建一个字符串而言,StringBuilder不会产生过多的中间资源
//实例方法
StringBuilder append(String s)//这是一个可以链式操作的方法,因为它返回的是this
StringBuilder insert(String s,int index)//在某个位置插入元素,后面的元素依次后移
void trimToSize()//使StringBuilder的容量缩减到刚好存储的元素个数大小
5 日期类
- 日期类主要由两个,Date和LocalDate,后者较新,推荐使用
==Date类==
//构造方法
new Date()//当前时间的日期类
new Date(long time)//指定time的日期,这个日期时间是相对于1970年1月1日00:00而言,单位毫秒
==LocalDateTime\LocalDate类==
- LocalDate是仅表示日期,LocalDateTime还表示时间
//静态方法
//获取当前时间
LocalDateTime.now()
//获取具体时间
LocalDateTime.of(int year,int month,int day ...)//等参数
//实例方法
String format(DateTimeFormatter dtf);//传入一个DateTimeFormatter
String toString();
String getDayOfYear();
String getDayOfMonth();
String getDayOfWeek();
String getYear();
==日期格式类==
- SimpleDateFormat和DateTimeFormatter,前者格式化Date类,后者格式化LocalDateTime类,前者是线程不安全的,后者是线程安全的,只需要创建一个实例,可以被多个线程使用
//SimpleDateFormat
new SimpleDateFormat("yyyy-MM-dd,HH:mm:ss")//创建格式
String format(Date date)//格式化日期,返回
//DateTimeFormatter
DateTimeFormatter.ofPattern("yyyy-MM-dd,HH:mm:ss")//指定格式
String format(LocalDateTime ldt)
6 大数类型
- 大数据类型能表示更精确的数值,执行更精确的运算,有BigDecimal,BigInteger等
//常用方法
BigDecimal.valueOf()//包装
BigDecimal add();//加,参数是另一个BigDecimal
BigDecimal multiply();//乘
BigDecimal divide()//除
7 数组
- 数组也是一种数据类型,在java里通过反射getSupperClass得到数组实现了Iterable和Cloneable接口,数组也是可迭代型的
//数组构造方法
type[] array = new type[size]
type[] array = {element}
array.length()
==Arrays工具类==
//Arrays工具类常用方法,都是静态方法
Arrays.asList(Object... obj);//可以传入一个数组,也可以可变参数传入,返回一个List集合
Arrays.sort(array);//默认按照升序和字典顺序,可以传入一个Comparator比较器
Arrays.binarySearch();//二分查找
Arrays.toString();//把一个数组转换为String的样式,即[1,2,3...]
Arrays.copyOf();//复制一个数组
Arrays.equals();//判断两个数组是否长度相同,对应index的元素也相同
Arrays.fill();//以xxx填充数组
十五、关键字
==static==
//static表示静态,对于所有被static修饰的内容,它都属于外部类所有 1. static 作用于成员变量上 static int a = 10;//a为类所有,类中所有的方法都可以访问 2. static 作用于局部变量上 //错误,static不能作用于局部变量,因为局部变量属于方法所有。总之方法里面不能定义static变量 3. static 作用于内部类上 //作用于内部类上,该内部类属外部类所有,且此时可以在内部类中定义static变量 4. static 作用于方法上 public static void show(){} //作用于方法上,该方法属类所有,该方法不能被子类重写,但是子类可以继承一个一模一样的方法。 //static修饰的静态方法中不能使用this关键字
==final==
final 表示最终 1. final 修饰变量 final int a = 10; final String s = new String("abc"); //被final修饰的变量只能被赋值一次。但是如果修饰的是引用类型,引用类型里面的属性可以变。 2. static + final //static final 修饰的变量为"常量" 3. final 修饰类 //被final修饰的类不可被继承,因此不能和abstract联用 4. final 修饰方法 public final void get(){} //被final修饰的方法不能被重写,只能被子类继承
==native==
public native int hashCode(); //native修饰表示这个方法是由非java语言编写的,如c++,jvm将从本地方法区中去寻找
==transient==
private volatile transient Constructor<T> cachedConstructor; private volatile transient Class<?> newInstanceCallerCache; //被transient修饰的将不参与对象序列化,即ObjectOutputStream不会写入
==assert==
启动断言,需要给虚拟机VM参数传入-ea,也就是给main函数的args传参 //断言失败,则会抛出断言异常 assert 1<0; Exception in thread "main" java.lang.AssertionError
==break==
break 用于跳出循环,循环体还可以设置一个标识,break直接跳出标识的循环 public static void main(String[] args) { flag:for (int i = 0; i < 10; i++) { while (true){ System.out.println("break跳出到外部标识"); break flag; } } }
==instanceof==
instanceof 用于判断连个对象是否是同一个实例,对于多态,instanceof始终为true Number a = Integer.valueOf(10); a instanceof Number;//true a instanceof Integer;//true
==super==
和this一样,静态方法中也不能使用super关键字 public Teacher(){ super();//引用父类构造方法 } super.toString();//引用父类方法
==this==
this 表示当前方法所属的类实例。静态方法中不能使用this。 1. 引用属性,实例方法 this.name = name; this.setName("name"); 2. 引用构造方法 this("1","name")
==strictfp==
strictfp 修饰类,表示该类中的浮点数使用精确计算,如果希望准确计算,就用该关键字修饰类 public strictfp Salary{}
==throw==
throw 出现在方法体中,表示执行到这时一定会抛出异常
==throws==
throws 出现在方法上,当检测到异常时才抛出