JAVA函数笔记

Object类   

protected Object clone()对象克隆(浅克隆)
int hashCode()获取对象哈希值

boolean equals(Object obj)   

{return (this == obj);}

判断两个对象是否相等

默认比较的是两个对象的内存地址

需要重写

重写的equals函数里的参数还是要是Object obj,否则不是重写,而是重载

String toString() 

将对象转换成字符串形式

默认返回内容是:类标识符@十六进制地址

子类需要重写此方法

println()输出引用本身时,会默认输出引用.toString()方法

Protected void finalize()垃圾回收器调用的方法
不需要手动调动,垃圾回收器负责(但要垃圾数量到达一定数量)
开发中用来记录释放时间
System.gc(); 建议启动垃圾回收器(只是建议)
public static native void arraycopy(Object src , int srcPos , Object dest ,
                                     int destPos , int length);
//src 拷贝源
//srcPos 拷贝起始位置
//dest 拷贝目的位置
//destPos 目标起始位置
//length 拷贝长度

java.lang.String类 

用双引号括起来的字符串是字符串常量,直接存储在“方法区”“字符串常量池”
(字符串本身是类(应该在堆栈中),但是在开发中使用的太频繁,因此SUN公司把字符串放到了方法区中)

String的几种常用构造方法

String x = "abc";                        //第一种

byte[] bytes = {97,98,99};               
String x = new String(bytes);            //第二种
//abc

byte[] bytes = {97,98,99};
String x = new String(bytes,1,2);        //第三种
//bc

String常见方法

char String.charAt(int index)返回 index 号位置上的字符
int compareTo(String str)比较字符串,相等返回0,大于返回1,小于返回-1
boolean contains(String str)是否包含str
boolean endsWith(String str) 是否以str结尾
boolean startsWith(String str)是否以str开始
boolean equals()判断两个字符串是否相同
boolean equalsIgnoreCose()判断两个字符串是否相等(忽略大小写)
byte[] getBytes()将字符串转换成 字节 数组
char[] toCharArray()将字符串转换成 字符 数组
int indexOf(String str) 返回str在字符串中第一次出现的位置
int lastIndexOf(String str)返回str在字符串中最后一次出现的位置
boolean isEmpty()判断字符串是否为空
int length()返回字符串的长度(数组length是属性,字符串是方法)
String replace(char oldChar,char newChar)返回替换后的字符串
String split(String regex)依照regex字符串进行拆分,返回拆分后的字符串数组
String substring(int startIndex,int endIndex)截取并返回以index为分界线的字符,重载方法(endIndex可以不填)
获取的范围是[ startIndex,endIndex )
String toLowerCase()转换成小写
String toUpperCase()转换成大写
String trim()去除字符串前后空白
String valueOf()将括号内的内容(非字符串)转换成字符串,String类中唯一一个静态方法

StringBuffer类

StringBuffer的底层其实是一个字符数组,初始化大小为16,满了会自动扩容
优化StringBuffer,因为扩容会产生系统内耗,所以尽可能给一个大一点的初始化容量,减少扩容次数
多线程安全的

StringBuffer strbuf = new StringBuffer(100);      //构造方法
StringBuffer.append();                            //追加内容

StringBuilder类

多线程不安全

八种包装类

为了把基本数据类型转变成引用数据类型(装箱)
再用包装类的方法把引用数据类型变成基本数据类型(拆箱)
这样就实现了数据类型的转换

bytejava.lang.Byte父类  Number
shortjava.lang.Short父类  Number
intjava.lang.Integer父类  Number
long  java.lang.Long父类  Number
floatjava.lang.Float父类  Number
double  java.lang.Double父类  Number
booleanjava.lang.Boolean父类  Object
charjava.lang.Character父类  Object

包装类里有 MAX_VALUE 和 MIN_VALUE 属性,可以访问当前基本数据类型对于的最大值和最小值
在JDK1.5之后支持自动装箱和自动拆箱了,不再需要包装类里的函数
就算用了包装类也不可以用 == 来比较,因为 == 比较的还是两个对象的地址


JAVA为了提高程序的效率,将-128到127的整形在类加载时就创建好放在了方法区常量池中,因此就算用了包装类,只要值在-128到127内,就不会再重新new一个对象,而是直接在常量池里获取


Integer 里面不能放中文字符串,编译虽然不会报错,但会有运行错误(数字格式化异常)

int --> String          String.valueOf(int);            //△
Integer --> String      String.valueOf(Integer i)
String -->    int       Integer.parseInt("123")        //△
Integer --> int         Integer.intvalue()             //拆箱
String --> Integer      Integer.valueOf(String s)
int --> Integer         Integer.valueOf(int i)         //装箱

//拆箱和装箱可以不记因为现在可以自动拆箱和装箱

java.util.Date类

Date nowTime = new Date();            //获取当前系统时间(精确到毫秒)
Date nowTime = new Date(long t);      //根据1970年到现在的毫秒来创建对象

java.text.SimpleDateFormat类

SimpleDateFormat smp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
//括号里填日期格式

日期格式:

yyyyMMddHHmmssSSS
毫秒
smp.format(nowTime);    
//返回一个规定的格式化日期字符串(Date类型转String类型)

Date dateTime = sdf.parse(time);
//将String类型转换成Date类型并且返回,time格式要符合SimpleDateFormat格式

System类

System.outout是System的静态变量
System.out.println()println不是System类的,是PrintStream类的
System.gc()建议启动垃圾回收器(只是建议)
System.currentTimeMillis()获取1970年到现在的总毫秒数
System.exit(0)退出JVM

java.text.DecimalFormat类

DecimalFormat df = new DecimalFormat("###,###.##");    
//括号里填数字格式


数字格式:

#,. 0
任意数字千分位小数点不够时补0(只可以补左边)
String s = df.format(1234.56);
//输出为  1,234.56

java.math.BigDecimal类

BigDecimal v1 = new BigDecimal(100);    //精度极高的100
BigDecimal v2 = vi.add(v1);             //v2为200
//加减乘除都有

java.util.Random类

int i = random.nextInt();    //获取随机数一个
int i = random.nextInt(101);    //获取随机数一个(100以内)

所有异常类都有 getMessage()printStackTrace() 两个方法
例:

NullPointerException e = new NullPointerException("空指针异常");
String msg = e.getMessage();

System.out.println(msg);    //打印结果:空指针异常
e.printStackTrace();        //打印异常信息

集合继承结构图

所有的集合类都在java.util中


Collection接口

Collection c = new ArrayList();
c.add(1200);                   //想集合里添加元素,1200自动装箱
c.size();                      //获取集合个数
c.clear();                    //清空集合
c.isEmpty()                    //判断是否为空
Object[] toArray()             //转换成数组
boolean contains(Object o)    //判断是否包含元素o
c.remove(Object o)            //删除元素o

/*
* contain,remove函数深入:
* contain,remove的实现调用了是Object里面的equals函数,因此如果集合要存入的是对象
* 因此对象的equals方法要重写
*/

Iterator迭代器

要使用时在声明迭代器,迭代器生成是依照集合当前状态生成的
迭代器生成后不能改变集合结构,但是可以通过迭代器来删除元素

Iterator it = c.iterator();
boolean hasNext();        //如果还有下一个元素可以迭代返回true
Object next();            //将迭代指针向下移动一个并返回下一个元素

List接口

List l = new ArrayList();
void add(int index,Object element);       //指定位置插入元素
Object remove(int index);                 //删除指定位置元素
Object get(int index);                    //获取指定位置元素
Object set(int index,Object element);     //修改指定位置元素
int indexOf(Object o);                    //获取元素o的位置
int lastIndexOf(Object o);                //获取元素o最后一次出现的位置

ArrayList类

ArrayList初始化容量为10(底层先创建一个初始化为0的数组,当加入第一个元素时,初始化容量为10)
扩容后的容量是原容量的 1.5 

构造方法:

ArrayList a = new ArrayList();

ArrayList a = new ArrayList(int initialCapacity);     //指定初始化容量

ArrayList a = new ArrayList(Collection<?extends E> c);    
//包含一个Collection接口的类进行初始化(可以用于将Set接口下的类转换成List类)

LinkedList类

LinkedList初始化first,last都是 null
假如要频繁的增删改数据或者内存要求比较大,才使用LinkedList

Vector类

初始化容量 10;底层也是数组;扩容后是原来的 2

Map接口

void clear();                           //清空
boolean containsKey(Object key);        //是否包含key
boolean containsValue(Object value);    //是否包含value
V get(Object key);                      //根据key获取value
V put(K key,V value);                   //设置键值对
boolean isEmpty();                      //是否为空
V remove(Object key);                   //根据key,删除元素(包括key)
int size();                             //返回元素个数
Set<K> keySet();                        //返回集合中所有的key
Collection<V> values();                 //获取所有的value
Set<Map.Entry<K,V>> entrySet();

 //将Map集合转换成Set集合,<Map.Entry<K,V>>也只是一个泛型而已,和<String>性质相同
 //Set里面的每一个元素是一个Node,而Node里面存储了key和value

HashMap类

加载因子是 0.75(即顺序表上数据存储占了总容量的75%就开始扩容)
初始化容量是 16手动赋值必须是 2的倍数

HashMap里面有 Node 节点,其中包括Object k,Object v,int hash,Node next
hash是k通过哈希算法得到的hash值,同一链表上hash值是相等的
因此用hash来查找顺序表数组下标,然后在该下标的链表下用k来遍历链表,获取value


传入数据,先用hashCode()方法获取hash值,然后找到hash值对应的链表,最后使用k.equals()来判断key是否一致


如果key重复了,链表上的value会被覆盖掉允许key为null

哈希表的查询和增删改效率都高,因为他用了顺序表作为主要查询表,而要增删改的数据部分都使用了链表的结构
这样就同时兼并了顺序表查找快,链表增删改方便的特点

在HashMap中的对象的 equals方法重写,hashCode方法也需要重写
对于一个equals相等的结构,说明是同一数据(HashMap元素不可重复),同一数据肯定在同一链表上
那么对于的hash值就必须相等,因此hashCode()返回的结果就必须相同,因此需要重写hashCode()方法

JDK8之后,如果单链表上上节点数超过 8,会自动变成树结构(也叫红黑树),当节点又小于 6 时,会自动变回单链表结构

Hashtable类

key和value值都不能为空
初始化容量 11,默认加载因子 0.75,扩容后是 2*原容量+1

Properties类

setProperty(Object key,Object value);    //添加键值对
getProperty(Object key);                 //获取值
FileReader reader = new FileReader("文件路径");
Properties pro = new Properties();
pro.load(reader);	//自动将等号左边做key,右边做value,并且类型都是String

TreeSet类

对String可排序(升序)

实现排序方法:

  1. 自定义类实现Comparable接口,重写compareTo()方法(返回值是0,>0,<0)
  2. 编写一个比较器,比较器也要实现java.util.Comparator接口
    TreeSet<> w = new TreeSet<>(new comparator);

java.util.Collections工具类

Collections.sort(List list);           //排序(还是要实现Comparable接口和实现compareTo()方法)

Collections.synchronizedList(list);    //线程安全

java.io类

  • java.io.InputStream类
  • java.io.OutStream类
  • java.io.Reader类
  • java.io.Writer类

以上四个都是抽象类

java.io.Flushable接口

flush();    //将管道内未输出的数据强行输出完,作用于清空管道

java.io.FileInputStream类

FileInputStream fis = new FileInputStream("文件路径");
int read();                //读取一个字节,若读到文件末尾,返回-1
int read(byte[] b);        //往数据内读数据,返回值是读到的字节数,当读到0个字节时时返回-1
read(byte[] b,int offse,int length);    //读入具体数量的数据
fis.close();                            //关闭流
int available();                        //返回流中剩余没有读的字节数量
long skip();                            //跳过几个字节不读取

java.io.FileOutputStream类

fos = new FileOutputStream("文件路径",ture);    //ture代表在文件末尾处追加,默认为false
write();                                        //写入数据
write(byte[] b);                                //写入数据
write(byte[] b,int offse,int length);           //写入具体数量的数据

以上两个类读和写可以拷贝任意类型的文件(包括图片和视频)

java.io.FileReader类

只能读取普通文本
FileInputStream 的区别就是变成了char数组

java.io.FileWriter类

只能读取普通文本
write(char[] c);
write(String str);

java.io.InputStreamReader类

InputStreamReader reader = new InputStringReader(FileInputStream in);

java.io.OutputStreamWriter类

OutputStreamReader reader = new OutputStringReader(FileOutputStream in);

java.io.BufferedReader类

自带缓冲区,不需要传入数组
当一个流的构造方法中需要一个流的时候,被传入的流叫 节点流
外部的流叫做 包装流 或者 处理流

BufferedReader br = new BufferedReader(Read in);
String readline();        //一次读取一行,不带换行符,文件末尾返回null

java.io.BufferedWriter类

和BufferedReader类似

java.io.BufferedInputStream类

java.io.BufferedOutputStream类

java.io.DataOutputStream类

可以将数据连同数据类型一起写入文件
只能用DataInputStream来读取数据,并且提前知道数据的存储顺序

DataOutputStream dis = new DataOutputStream(FileOutputStream out);
dis.writeByte();
dis.writeShort();
dis.writeInt();
dis.writeLong();
dis.writeFloat();
dis.writeDouble();
dis.writeBoolean();
dis.writeChar();

java.io.DataInputStream类

java.io.PrintWriter类

java.io.PrintStream类

标准输出流不需要手动关闭

PrintStream ps = System.out;
ps.println("abcdefg~");

PrintStream ps = new PrintStream(new FileOutputStream("文件路径"));
System.setOut(PrintStream ps);        //将输出方向转到文件里

java.io.ObjectOutputStream类

ObjectOutputStream oos = new ObjectOutputStream(OutputStream os);
os.writeObject(s);
os.writeObject(list);    //可以序列化一个对象集合

java.io.ObjectInputStream类

用于实现反序列化

java.io.File类

File f1 = new File("文件路径");
f1.exists();                 //判断文件是否存在
f1.createNewFile();          //创建文件
f1.mkdir();                  //以目录形式创建
f1.mkdirs();                 //以多重目录形式创建
f1.getParent();              //获取父路径
f1.getAbsolutePath();        //获取绝对路径
f1.getName();                //获取文件名
f1.isDirectory();            //判断是否是一个目录
f1.isFile();                 //判断是否是一个文件
f1.lastModified();           //获取文件的最后修改时间,返回值是一个long类型毫秒
f1.length();                 //获取文件大小,按字节算
f1.listFiles();              //获取路径下所有子文件

Thread类

String getName();              //获取线程名字
voide setName(String s);       //设置线程名字
Thread.currentThread():        //获取当前线程
static void sleep(long hm);    //只能让出现sleep所在的进程睡眠(进入阻塞状态),单位是毫秒
void setPriority();            //设置优先级
int getPriority();             //获取线程优先级
static void yield();           //让位方法(进入就绪队列)
void join();                   //合并线程(当前所在线程会让t先运行玩在继续运行)
t.setDaemon(true);             //将线程设置为守护线程

java.util.Timer类

timer.schedule(TimerTask t, Date firstTime, long hm);
//从firstTime开始,每隔hm毫秒执行一次t任务
//例:
Timer timer = new Timer();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date firstTime = sdf.parse("2020-03-14 09:30:00");
timer.schedule(new LogTimerTask(),firstTime,1000*10);

class LogTimerTask extends TimerTask{
    public void run(){}
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值