常见包
- java.lang 比如:String\Object\包装数据类型等等,这些包默认导入了,所以不用手动导入
- java.util 集合相关
- java.awt 图形化界面编程
- java.sql 数据库相关
- java.io io流相关
- java.net 网络相关
字节码对象
Object
含义
是一切类【除了它本身】的根类;一切类【除了它本身】都是直接或者间接继承了Object
常见方法
toString //打印对象,本质是打印对象的toString方法的结果
equals //默认比较两个对象内存地址是否一样
finalize //当对象被回收的时候调用该方法
hashcode //通过哈希算法计算出来的一个十进制
getClass //获取对应的字节码对象
wait //等待
notify //唤醒
notifyAll //唤醒所有
案例
public class User {
private String name;
public User(String name){
this.name = name;
}
@Override
public boolean equals(Object obj) {
User other = (User)obj;
return name.equals(other.name);
}
@Override
public String toString() {
return "User [name=" + name + "]";
}
}
public class Test {
//常见的包
//java.lang [比如:String,...] 默认导入这些包
//java.util 集合相关的类
//java.awt 图形界面编程
//java.net 网络编程相关
//java.io io
//java.sql 操作数据的类型
//Object
//含义: 是一切类【除了它本身】的根类;一切类【除了它本身】都是直接或者间接继承了Object
//常用方法
//equals 两个对象的比较,默认比较的是地址[一般会重写该方法]
//finalize 当对象被回收的时候会调用该方法
//hashCode 是通过哈希算法计算出来的【在后面课程HashMap会使用到】
//toString 打印对象,本质打印对象toString方法结果【根据需求重写】
//getClass 获取字节码对象
//User.class --(一次就好)--> JVM
//会生成一个对象来表示该字节码信息
//wait 线程等待[会释放锁]
//notify 唤醒
//notifyAll 唤醒所有等待的线程
public static void main(String[] args) {
Test one = new Test();
Test two = new Test();
boolean sign = one.equals(two);
System.out.println(sign);
User user = new User("zs");
User userOther = new User("zs");
System.out.println(user.equals(userOther));
System.out.println(user.hashCode());
System.out.println(user);
System.out.println(user.toString());
Class clazz = user.getClass(); //clazz代表User.class对应字节码对象
//clazz包含了User类的所有信息
System.out.println(clazz.getPackage().getName());
System.out.println(user.getClass());
System.out.println(user.getClass()==userOther.getClass());
}
}
Math
含义
是一个工具类型,提供数学中常用的方法
案例
public class MathTest {
//Math【工具类】
//含义:包含了大量数学的常用方法
//方法:
public static void main(String[] args) {
System.out.println(Math.PI);
//获取绝对值
System.out.println(Math.abs(-1));
System.out.println(Math.max(-100, 10));
System.out.println(Math.min(-100, 10));
System.out.println(Math.sqrt(9));
System.out.println(Math.random()); //[0.0,1.0)
//5-8
System.out.println((int)(Math.random()*4+5));
}
}
UUID
含义
生成更加随机的随机数[长度36]
使用场景
- 数据库的主键 [一般会将-替换成空白串]
- 文件打散
案例
public class UUIDTest {
//UUID
//含义:生成更加随机的随机数[长度36]
//使用场景
//数据库的主键 [一般会将-替换成空白串]
//文件打散
public static void main(String[] args) {
UUID myUUID = UUID.randomUUID();
String result = myUUID.toString();
result = result.replace("-","");
System.out.println(result);
System.out.println(result.length());
}
}
日期
相关类
- Date 代表时间对象
- Calendar 用于操作Date对象的类
- SimpleDateFormat 时间格式化类
常见格式化
案例一
public class DateTest {
//时间操作类
//Date
//Calendar
//Date
//含义:代表时间
//Calendar
//含义:里面封装了大量操作时间的方法
public static void main(String[] args) {
//代表当前时间
Date date = new Date();
System.out.println(date);
//过时:不建议使用,因为存在隐患
//date.getYear();
//date.getMonth();
Calendar calendar = Calendar.getInstance();
//获取时间对象
date = calendar.getTime();
System.out.println(date);
//设置calendar的时间
//calendar.setTime(date);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DATE));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(Calendar.TUESDAY);
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
System.out.println(calendar.get(Calendar.HOUR)); //12
System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); //24
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
//设置
//calendar.set(Calendar.MONTH,8);
//System.out.println(calendar.getTime());
//添加\减少
calendar.add(Calendar.DATE,-2);
calendar.add(Calendar.DATE,4);
System.out.println(calendar.getTime());
//比较
Calendar currentDate = Calendar.getInstance();
//晚于
System.out.println(currentDate.after(calendar));
//早于
System.out.println(currentDate.before(calendar));
//compareTo 0:相等 -1早于 1晚于
System.out.println(currentDate.compareTo(calendar));
System.out.println(calendar.compareTo(currentDate));
System.out.println(Calendar.getInstance().compareTo(Calendar.getInstance()));
//获取毫秒
System.out.println(currentDate.getTimeInMillis());
}
@Deprecated
public static void say(){
System.out.println("hello world");
}
}
案例二
public class FormatTest {
//Parse 解析
public static void main(String[] args) throws ParseException {
Date date = new Date();
System.out.println(date);
//DateFormat
//SimpleDateFormat
//SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
//simpleDateFormat.applyPattern("yyyy年MM月dd日 HH:mm:ss");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//指定格式 yyyy-MM-dd HH:mm:ss
//要么构造器传递
//要么手动指定
String result = simpleDateFormat.format(date);
System.out.println(result);
//2021年07月27日 15:05:08 ---》Date对象
date = simpleDateFormat.parse("2021年07月27日 15:05:08");
System.out.println(date);
//TODO 自行模拟解析异常
}
}
Arrays
含义
是操作数据的工具类
案例
public class ArraysTest {
public static void main(String[] args) {
int [] num = {11,2,7,4,5};
//打印数组
//下标
//forEach
System.out.println(Arrays.toString(num));
Arrays.sort(num);
System.out.println(Arrays.toString(num));
int result = Arrays.binarySearch(num, 7);
System.out.println(result);
//copyOf如果长度一样则返回一个元素个数一样的新数组
//copyOf如果长度小于目标长度,则返回前几个元素
//copyOf如果长度大于目标长度,多余的位置补充默认值
int [] newNum = Arrays.copyOf(num, 5);
System.out.println(Arrays.toString(newNum));
//TODO 以后学习
//Arrays.asList(a)
}
}
BigDecimal
含义
用来表示任意精度的小数,常用在金额、高精度仪器
使用原因
因为float\double类型的数据在做操作可能会造成精度丢失
构造器注意点
- new BigDecimal(double value)
不建议使用,查看注意点
-
new BigDecimal(String value)
建议使用
注意点
案例
public class BigDecimalTest {
//BigDecimal
//含义:精度可靠的小数点
public static void main(String[] args) {
//抛出问题:因为float\double操作都有可能会有精度丢失
float price = 0.123456789f;
System.out.println(price);
BigDecimal bigDecimal = new BigDecimal(price+"");
BigDecimal twoDecimal = new BigDecimal("0.000001");
//相加
BigDecimal result = bigDecimal.add(twoDecimal);
System.out.println(result);
//相乘
result = bigDecimal.multiply(twoDecimal);
System.out.println(result);
//减法
result = bigDecimal.subtract(twoDecimal);
System.out.println(result);
//除法
result = bigDecimal.divide(new BigDecimal("2"));
System.out.println(result);
//四舍五入
result = result.setScale(3, RoundingMode.HALF_UP);
System.out.println(result.toString());
//TODO 自行尝试
//result.compareTo(val)
}
}
BigInteger
含义
可以表示任意大小的整数
案例
public class BigIntegerTest { //BigInteger //无限大的整数 public static void main(String[] args) { BigInteger bigInteger = new BigInteger("99999999999999999999999"); BigInteger result = bigInteger.multiply(new BigInteger("12")); System.out.println(result); result = bigInteger.add(new BigInteger("100")); System.out.println(result); //TODO 其他自行尝试 }}
String
含义
不可变的字符串类
本质
private final char value[];
创建方式
//通过字面赋值【会使用到常量池】new String("字符串")new String(byte [] value);new String(byte [] value,int offset,int length); new String(char [] value);new String(char [] value,int offset,int length);
常用方法
equals equalsIgnoreCasecharAtsplittoUpperCasetoLowerCase replace //替换subString //截取子串compareTo //比较getBytes //字符串转成字节数组
案例
public class StringTest { //String //含义:不可变的字符串类 //本质:private final char value[]; //创建的方式 //通过字面赋值【会使用到常量池】 //new String("字符串") //new String(byte [] value); //new String(byte [] value,int offset,int length); //new String(char [] value); //new String(char [] value,int offset,int length); //常用方法 //equals //equalsIgnoreCase //charAt //split //toUpperCase //toLowerCase //replace //替换 //subString //截取子串 //compareTo //比较 //getBytes //字符串转成字节数组 public static void main(String[] args) throws InterruptedException { //证明String是不可变的字符串 String name = "java"; System.out.println(name.hashCode()); name = "html"; System.out.println(name.hashCode()); System.out.println("-------------字面赋值-----------"); String userName="zs"; //会检查常量池中有没有"zs",如果有指向,如果没有则创建"zs"对象放到常量池 //0 1 String peopleName ="zs"; System.out.println(userName==peopleName);//true System.out.println("-------------new创建-----------"); String hobby = new String("java"); //1 2个对象 String otherHobby = new String("java"); System.out.println(hobby == otherHobby); System.out.println("---------------常用方法--------------"); //字符比较的时候,使用equals,比较的是内容 System.out.println(hobby.equals(otherHobby)); System.out.println(hobby.equalsIgnoreCase("JAVA")); //转大写 System.out.println(hobby.toUpperCase()); System.out.println(hobby.toLowerCase()); String content = "hello world"; System.out.println(content.indexOf("l"));//第一次出现的位置 System.out.println(content.lastIndexOf("l"));//第后一次出现的位置 //切割 System.out.println(Arrays.toString(content.split(" "))); System.out.println(content.charAt(4)); System.out.println(content.replace("world", "java")); //自行总结 System.out.println("cc".compareTo("cc")); System.out.println("abc".compareTo("aec")); System.out.println("ad".compareTo("aa")); //hello world //截取 System.out.println(content.substring(content.indexOf(" ")+1)); System.out.println(content.substring(0, content.indexOf(" "))); //字符串转字节数组 byte [] bytes = "abc".getBytes();//[97,98,99] System.out.println(Arrays.toString(bytes)); //String 构造器 char [] charData = {'a','b'}; String data = new String(charData); data = new String(bytes); System.out.println(data); data = new String(bytes, 1, 2); System.out.println(data); }}
StringBuilder
含义
内容可变的字符串
构造器
- new StringBuilder();
- new StringBuilder(String initValue);
常用方法
indexOflastIndexOfcharAtsubstringdeleteCharAt 删除指定位置的字符append 追加insertlength
案例
public class StringBuilderTest { //含义: //内容可变的字符串 public static void main(String[] args) { //StringBuilder //构造器 //new StringBuilder(); //new StringBuilder(String initValue); //方法 //indexOf //lastIndexOf //charAt //substring //deleteCharAt 删除指定位置的字符 //append 追加 //insert //length StringBuilder SB = new StringBuilder(); SB = new StringBuilder("hello"); //System.out.println(SB.hashCode()); SB.append("world"); //System.out.println(SB.hashCode()); System.out.println(SB); //删除指定位置的字符 //SB.deleteCharAt(0); //System.out.println(SB); //append SB.append(" java").append(" python").append(" html"); System.out.println(SB); SB.insert(SB.lastIndexOf("l")+1, " oracle"); System.out.println(SB); System.out.println(SB.length()); }}
StringBuffer
含义
内容可变的字符串类
方法
和StringBuilder几乎一样
区别
- StringBuffer的方法几乎都有synchronized,而StringBuilder没有
- synchronized代表同步
- StringBuilder效率比StringBuffer高
案例
public class StringBufferTest { //含义: //内容可变的字符串类 //方法 //和StringBuilder几乎一样 //区别 //StringBuffer的方法几乎都有synchronized,而StringBuilder没有 //同步 public static void main(String[] args) { StringBuffer SB = new StringBuffer("java"); SB.append(" python").append(" html"); String result = SB.toString(); System.out.println(result); }}
评论区