JavaSE学习笔记
前言
温故而知新,可以为师矣
二阶段day07
一、接口interface
1.接口作用:
1.起到模板的作用,规范统一代码
2.达到了对类的扩展(因为可以多继承和多实现)
2.语法:
interface 接口名 [extends 父接口1,父接口n]{
//属性:所以的属性都是 被 public static final 修饰
//方法:1.7jdk public abstract
//1.8 JDK:抽象方法: 默认public abstract
静态方法:(默认public)+static只能被接口调用(不能重写)
default方法: (默认public)+default (可以重写)
}
实现类:// 单继承多实现
class 类名 [extends 父类] implements 接口1,接口2,接口n{
//必须去实现父类或者接口中抽象方法
}
3.注释:
父类中的静态方法只能在父类中调用,非静态方法可以通过子类调用
静态常量特点:名称全大写
二、java的常用类
1.javaSe 系统类库:
他们是java语言提供编写好的具有某些特定的功能的类,程序员在编写代码的时候只需要调用即可.
2.java.lang.Object:
超类,根类,基类 :所以类的父类
- 构造器: Object()
方法 | 返回值 | 说明 |
---|---|---|
克隆: clone() | protected object | 创建并返回此对象的副本。 |
比较: equals(Object obj) | boolean | 指示一些其他对象是否等于此。 |
返回类: getClass() | 类<?> | 返回此 Object的运行时类。 |
hashCode() | boolean | 返回对象的哈希码值。 |
toString() | String | 返回对象的字符串表示形式。 |
3.Math工具类
没有构造器,方法均为static
属性:E自然对数的基数 static double
PI static double
方法 | 说明 | 返回值 |
---|---|---|
Math.abs() | 绝对值 | |
Math. ceil() | 向上取整 | |
Math. floor () | 向下取整 | |
Math.round() | +0.5向下取整 13.5=13; | |
Math.rint() | 四舍六入.5取偶 | |
Math.sqrt() | 开方 | |
Math.pow(a, b) | a的b次方 | |
Math.random() | 随机数 | |
Math.min(a, b) | a b 中的最小值 |
java.lang.String:字符串类, 不可变的字符串类
构造器
String()
String(String str)
String(byte [] arr) //把字节数组转换为字符串对象
String(char [] arr) //把一个字符数组转换为字符串对象
返回值 | 方法名 | 作用 |
---|---|---|
char[] | toCharArray() | 把字符串对象转换为字符数组 |
byte[] | getBytes() | 把字符对象转换为字节数组 |
int | length() | 获得字符串的长度 |
int | indexOf(String str) | 找出字符串首次出现的位置,没有返回-1 |
int | indexOf(String str,int index) | 从index开始找出字符串首次出现 的位置,没有返回-1 |
int | lastIndexOf(String str) | 找出字符串最后出现的位置,没有返回-1 |
char | charAt(int index) | 返回字符串中下标为index的字符 |
String | concat(String str) | 字符串拼接,获得一个新的字符串,相当于 “+” |
boolean | equals(String str) | 比较两个字符串内容是否相等 |
int | compareTo(String str) | 比较两个字符串的大小 |
String | replace(String a ,String b) | 将字符串中的a转换为b |
boolean | endsWith(String s) | 判断字符串是否以字符串s结束/ |
boolean | startsWith(String s) | 判断字符串是否是字符串s开始/ |
boolean | contains(String s) | 判断字符串是否包含指定的s序列 |
String | toLowerCase(String s) | 将字符串中的所有数据小写/ |
String | toUpperCase(String s) | 将字符串中的所有数据大写/ |
String | trim() | 去掉字符串中前后的空格 |
boolean | isEmpty() | 判断字符串是否为空 |
String[] | split(char a) | 将字符串以a分割(a去掉) |
String | subString(int start,int end) | 将字符串有start截取到end(左闭右开:取start位不取end位) * |
boolean | matches("^ [A-Z]{3,}[0-9]{3}$") | 比较字符串内容是满足正则验证 |
static String | valueOf(Object obj) | 把任意对象转换为字符串对象 |
java.lang.StringBuffer 可变字符串类,线程安全的
构造器
StringBuffer()
StringBuffer(CharSequence cs)
StringBuffer(int capacity)
StringBuffer(String str)
返回值 | 方法名 | 作用 |
---|---|---|
StringBuffer | append(String str) | 将指定的字符串附加到此字符序列。 |
StringBuffer | delete(int start, int end) | 删除此序列的子字符串中的字符。 |
StringBuffer | deleteCharAt(int index) | 删除 char在这个序列中的指定位置。 |
StringBuffer | insert(int offset, String str) | 将字符串插入到此字符序列中。 |
StringBuffer | replace(int start, int end, String str) | 用指定的String中的字符替换此序列的子字符串中的 String 。 |
StringBuffer | reverse() | 导致该字符序列被序列的相反代替。 |
StringBuffer | indexOf(String a, String b) | 替换单个字符,将a替换成b |
void | setCharAt(int index, char ch) | 指定索引处的字符设置为 ch 。 |
java.lang.StringBuilder 可变字符串类,线程不安全的
方法和StringBuffer一致
二阶段Day08
一、 Date:
1. 导包:java.util.Date
2. 注释:
1s=1000ms
获得从1970年到现在的毫秒:
System.currenTimeMillis():
long a=Date.getTime
3. 构造器:
Date()
Date(long date) 单位:毫秒,在当前时间上加date毫秒
//int:11位以上用long
4. 方法:
long setTime(long date) date:毫秒值 在当前时间上加上date毫秒
long getTime():获得当前时间 (星期 月份 时间)
long toString()
二、 Calendar:日历类
1. 注释:
抽象类,不能实例化,只能实例化子类
实例化方法:实例化的还是子类对象
static Calendar getInstance() 属性:都是静态的
2. 属性
YEAR
MONTH
DAY_OF_MONTH
HOUR_OF_DAY
HOUR
MINUTE
SECOND
MILLISECOND
WEEK_OF_YEAR
DAY_OF_YEAR
3. 方法
返回值 | 方法名 | 作用 |
---|---|---|
int | get(int filed) | 获取字段的值 |
void | set(int filed,int value) | 设置字段的值:把filed变成value |
void | set(int year,int month,int day) | |
void | set(int year,int month,int day,int hour,int minute,int second) | |
Date | getTime(); | |
void | setTime(Date date); | |
void | add(int filed,int addValue) | |
void | setTimeInMillis(long time) | |
long | getTimeInMillis | |
static | Calendar getInstance() |
//把一个日期对象转换为日历对象
日历对象.setTime(new Date());
//把一个日历对象转换为日期对象
Date time= 日历对象.getTime();
//给字段做运算
日历对象.add(Calendar.MONTH, -11);
4. 月份英文
January
February
March
April
May
June
July
August
September
October
November
December
5. 创建日历对象
i. 导包import java.util.Calendar;
ii. 创建日历对象
Calendar cl=Calendar.getInstance();
三、 Number数字类
1. 方法
返回值 | 方法名 |
---|---|
byte | byteValue() |
int | intValue() |
double | doubleValue() |
…
2. 包装类:对应的基本数据的封装类
Integer int
Character char
Byte
Short
Long
…
构造器
Integer(int value)
Integer(String value)
Byte(byte value)
Byte(String value)
方法
返回类型 | 方法名 | 作用 |
---|---|---|
int | parseInt(String str) | 把string转换为int类型 |
Character(char value) | 把char类型的字符封装 | |
isDigit(char ch) | 确定指定的字符是否是数字。 | |
isLetter(int char ch) | 确定指定的字符是否是一个字母。 |
3. 拆箱装箱
装箱:把基本数据类型转换为引用数据类型
拆箱:把引用数据类型转换为基本数据类型
属性:全部是包装类,不再基本数据类型
四、 System
1. 类型
in 输入流
out 输出流
err 错误输出流
2. 方法
方法名 | 作用 |
---|---|
currentTimeMillis() | 获得当前时间的毫秒值 |
exit(int status) | 退出 |
gc() | 运行垃圾回收器。 |
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) | src:源数组 srcPos:开始下标 dest:目标数组 destPos:目标起始位置 length:拷贝长度 |
3. 垃圾回收机制(GC)
-
(1)内存溢出
java程序运行的时候,会产生很多数据,这些数据要写内存进行存储,如果内存全部占满了,再入写入数据的时候,会导致内存溢出(数据写不进去了).
-
(2)解决的办法
及时清理内存,清理无效的数据或者无用的数据,这种操作就叫垃圾回收.
-
(3)java语言垃圾回收
ava有专门的的回收机制,程序员无序考虑.
-
(4)java回收机制的算法.
新生代,老生代
- (5)java语言是不允许程序员去进行垃圾回收
- (6)程序设计一定要严谨,优化,用完的一定要释放.
五、 格式化类
1. 分类:
DateFormat
SimpleDateFormat
java.text DateFormat
2. 保留字母
关键字 | 作用 | 关键字 | 作用 |
---|---|---|---|
y | 年 | M | 月 |
d | 日 | H | 小时(0-23) |
m | 分钟 | s | 秒 |
E | 星期 | k | 小时(1-24) |
3. 构造器
SimpleDateFormat()
//按默认的格式进行日期格式化
SimpleDateFormat(String pattern)
//按指定格式进行解析日期
4. 方法
返回类型 | 方法名 | 作用 |
---|---|---|
String | format(Date date) | 把日期格式化成字符串类型 |
Date | parse(String text) | 把字符串格式化日期 |
java.text DecimalFormat
1.保留字
0 | 小数点后 |
# | 小数点前 |
. | 小数的分隔符的占位符 |
- | 缺省负数前缀。 |
% | 乘以 100 和作为百分比显示 |
, | 分组分隔符的占位符 |
2. 方法
方法名 | 作用 |
---|---|
DecimalFormat() | 按默认的格式进行日期格式化 |
DecimalFormat(String pattern) | 按指定格式进行解析日期 |
String format(Number num) | 把数字格式化成字符串类型 |
Number parse(String text) | 把字符串格式化数字类型 |
六.Arrays 数组工具类
int index Arrays.binarySearch(int [] arr1,int num)
//查询num在arr1数组中的坐标(数值大于0的如果没有返回-6 数值小于0的返回-1)
Arrays.equals(String arr1,String arr2)
//比较两个数组的大小
Arrays.sort(arr2)
//排序
二阶段Day09
一、 异常:Exception ***
1. 定义:程序中发生一些错误,但是所有错误不都是异常,有错误是可以避免的.
2. 父类:Throwable
子类:Error Exception
3. 异常分类
编译期异常(非运行时异常:在程序编写的的时候报的错误,必须进行处理,
这种异常叫编译期异常.
Exception 下所有子类除开RuntimeException
运行时异常(非编译期异常):在运行的时候可能会出现的异常,这种异常可处理可不处理.
RuntimeException 下所有子类
4. 编译期异常常见类有哪些异常类?
格式化 ParseException
找不到文件 FileNotFoundException
找不到类 ClassNotFoundException
IO异常 IOException
sql异常 SQLException
阻塞超时 TimeoutException
5. 运行时异常常见类有哪些异常类?
空指针 NullPointerException
下标越界 IndexOutOfBoundsException
数组下标越界 ArrayIndexOutOfBoundsException
字符串下标越界 StringIndexOutOfBoundsException
类型转换异常 ClassCastException
算数异常 ArithmeticException
数字格式化异常 NumberFormatException
6. 构造器
Exception()
Exception(String message)
7. 方法
getMessage, 获得异常信息
etStackTrace, 获得异常级别
printStackTrace, 输出异常级别
8. 处理方式
抛 :只针对编译期异常throws
语法
[修饰符] 返回值 方法名([参数列表]) throws 异常1,异常2,异常n{
捕获
try{ //可能会出现异常的语句
}catch(能捕捉到的异常类型 对象){
//捕获异常的处理方式
}
注意:
当可能会出现异常的语句是 编译异常 捕获的才能写编译期对应异常类,
其他时候catch不能写编译期异常
捕获2
try{
//可能会出现异常的语句
}catch(能捕捉到的异常类型 对象1){
//你捕获异常的处理方式
}catch(能捕捉到的异常类型 对象2){
//你捕获异常的处理方式
}catch(能捕捉到的异常类型 对象n){
//你捕获异常的处理方式
}
注意:
catch异常从小到大
捕获 3
try{
//可能会出现异常的语句
}catch(能捕捉到的异常类型 对象1){
//你捕获异常的处理方式
}catch(能捕捉到的异常类型 对象n){
//你捕获异常的处理方式
}finally{
//最终都会执行的语句 释放资源
}
9. throw 声明异常
要分 运行时和非运行时
a) 父类抛出异常 子类重写一定要抛出吗?
子类可以不抛出异常,子类可以重写时解决异常
b) 父类抛出异常子类重写可以抛出大的异常吗?
不可以
c) 父类抛出异常 子类重写可以抛出小的异常吗?
可以子类精确异常类(缩小异常范围类)
d) 父类抛出异常 子类重写可以抛出更多的异常吗?
如果父类没有运行时异常子类可以抛任何RuntimeException ,RuntimeException随便抛
父类没有编译期异常,子类不能抛出任何编译期异常
自定义异常
extends RuntimeException 这是一个运行时异常
extends Exception 这是一个编译期异常
二、 IO**
1. 流:计算机里面一组有序的,有开始有结束的一种传输.
2. File :代表磁盘中的某个文件夹或文件
3. 属性
pathSeparator ;
separator \
4. 构造器
File(String path)
File(String parent,String child);
File(File parent,String child);
5. 方法
boolean canExecute() 文件路径是否存在
boolean canRead() 文件是否可读
boolean canWrite () 文件是否可写
boolean createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
boolean delete() 只能删除文件或者空文件夹
boolean deleteOnExit() 退出删除
boolean exists() 是否存在
String getAbsoluteFile() 获得绝对路径 (从盘符开始的路径)
String getParentFile() 获得父级目录
String listFiles() 获得所有的子文件加或者文件
绝对路径:从盘符开始
相对路径: 相对于该项目来说的路径
默认路径:当前项目 +path
6. 流分类
方向
输入 in InputStream
输出 out OutputStream
类型
字节型 Input,Output
字符型 Reader,Writer
功能
节点流
缓存流 Buffer
7. InputStream
FileInputStream :文件字节输入流
构造器
FileInputStream(File file)
FileInputStream(String path)
方法
int read() 读取一个字节 如果读到末尾返回-1
int read(byte[] arr)
void close(); 关闭程序
8. OutputStream
FileOutputStream
构造器
FileOutputStream(File file)
FileOutputStream(String path)
FileOutputStream(File file,boolean tf)
FileOutputStream(String path,boolean tf)
方法
void write() 读取一个字节 如果读到末尾返回-1
void write(byte[] arr)
void close(); 关闭
二阶段Day10
一、 三种流
1. 字节流:能处理任何文件
InputStream
FileInputStream(子类)
方法:int read();
OutputStream
FileOutputStream(子类)
方法: void write(int b)
void write(byte[] b)
字节缓冲流:读到末尾 返回的 -1
BufferedInputStream (InputStream a)
BufferedOutputStream(OutputStream b)
2. 字符流:文本文件
Reader
OutputStreamReader(OutputStreamReader)转换流:把字节转换成字符
FileReader :文件输入流
Writer
OutputStreamWriter(OutputStream out, Charset cs)
创建一个使用给定字符集的OutputStreamWriter。
FileWriter :文件输出流
读到末尾 返回的 -1
读到末尾 返回的 String null
3. 对象流
ObjectInputStream(FileInputStream);
对象读入: readObject();
读到末尾 返回的异常 EOFException(catch)
ObjectOutputStream(fileOutputStream);
对象写入:writeObject(object)
二、 集合:
数组:首位新增和删除的效率低,查找快
链表:新增和删除的效率高,遍历和检索效率低
1. Collection
方法
boolean add(E e) 确保此集合包含指定的元素
boolean addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合
void clear() 从此集合中删除所有元素
boolean contains(Object o) 如果此集合包含指定的元素,则返回 true 。
boolean containsAll(Collection<?> c) 如果此集合包含指定集合中的所有元素,则返回true。
boolean equals(Object o) 将指定的对象与此集合进行比较以获得相等性。
boolean isEmpty() 如果此集合不包含元素,则返回 true
boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)
boolean removeAll(Collection<?> c) 删除指定集合中包含的所有此集合的元素
int size() 返回此集合中的元素数。
Object[] toArray() 返回一个包含此集合中所有元素的数组
List:传递集合 有序,可重复的
方法
void add(int index, E element)
把集合作为一个元素存入集合中
boolean addAll(int index, Collection<? extends E> c)
把所有元素一个一个添加到该集合中
int size()
元素不为null 个数 不代表底层数组的长度
E get(int index)
int indexOf(Object o)
int lastIndexOf(Object o)
E remove(int index)
E set(int index, E element)
List<E> subList(int fromIndex, int toIndex)
ArrayList:底层也是数组实现,初始容量默认为10 ,新增50%,检索(查询)效率较高,线程不安全
ArrayList()
ArrayList(int initialCapacity)
ArrayList(Collection c)
Iterable T - 迭代器返回的元素的类型
Vector:底层都是数组实现的 扩容1倍,线程安全
Vector(int initialCapacity, int capacityIncrement)
LinkedList:底层双向链表,插入和删除效率较高,随机访问效率低
二阶段Day11
一、 Set
1. 性质:
无序,不可重复的,最多只能有一个null
和collection方法继承而来,没有延伸
2. hashset:
实现set接口所有方法
延伸:clone
特殊:实现add方法:检索比较哈希值和equals同时相同认为是同意元素添加失败
无序的没有下标,打印方式有两种:foreach 迭代器
3. TreeSet:
无序存入,有序输出
自带比较器:遍历是有序的,javase中唯一一个实现自动排序的集合类型
4. LinkHashSet:
有序的,不是比较的大小,双向链表
根据元素的hashCode值来存储元素的位置,用链表维护元素的秩序.
二、 Map:保存一对元素,键值对
key(键):不能重复
value(值):可重复的
1. 方法
void clear()
boolean containsKey(Object key)
boolean containsValue(Object value)
Set<Map.Entry<K,V>> entrySet() 返回键值对视图
boolean equals(Object o)
V get(Object key)
boolean isEmpty()
Set<K> keySet() 返回所有的键
Collection<V> values() 返回所有的值
V put(K key, V value) 添加键值对
V remove(Object key)根据键删除键值对
default boolean remove(Object key, Object value)
default V replace(K key, V value)
int size()
2. HashMap
构造器
HashMap()
HashMap(int initialCapacity)
hashtabble:键值不能为空
hashmap:键值都可以为空
ConcurrentHashMap:底层采用分段的数+链表,线程安全的
三、 泛型:
1. 起源:JDK1.5
2. 概念:广泛的引用数据类型 ,如果不明确定义,那么默认为Object
3. 语法 <>
定义在类上:
class 类名<泛型名1,泛型名n>{
}
定义在方法上:
public <T> 返回类型 函数名(跟<T>有参数){
}
4. 作用
把集合的数据类型进行确定,避免上下转型.
总结
提示:这里对文章进行总结: