常用API
什么是API?
应用程序编程接口;就是java已经写好的一些方法,可以直接拿过来用。
Object类的作用:
一个类要么默认继承了Object类,要么间接继承了Object类,Object类是java中的祖宗类
Object类的方法是一切子类都可以直接使用的。
Object类的常用方法
public String toSting()
默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
toSting()方法存在的意义就是为了被子类重写,以便返回对象的内容信息而不是地址信息。
public Boolean equals(Object)
默认是比较当前对象与另一个对象地址是否相同,相同返回true,不同返回false
public Boolean equals(Object o)
默认是表当前对象与另一个对象的地址是否相同,相同返回true,不同返回false;与“==”比较功能一致。
父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则。
Objects
概述:
Objects类与Object是继承关系,Objects类是从JDK1.7开始有的
官方在进行字符串比较时,没有用自己的equalse方法,而是选择了Objects的equals方法来进行比较两个对象。
1.判断是否是同一个对象比较,如果是返回true。
2.如果不是则判断内容是否一致,如果是返回true,不是返回false
Object的equals方法比较的结果是一样的,但是更安全。
常见方法:
public static boolean equals(Object a, Object b)
比较两个对象,底层会先进行非空判断,从而可以避免空指针异常。在进行equals比较。
String s1 = null;
String s2 = new String("hhh");
System.out.println(s1.equals(s2));//有隐患,可能出现空指针异常
System.out.println(Objects.equals(s1,s2));//更安全,结果更准确(开发优先使用)
public static boolean isnull(Object obj)
判断变量是否为null,为null返回true,反之
常用类
常用类
String
String概述
java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
java程序中所有的字符串文字(例如“abc“)都为此类对象。
String类的特点详解
String是什么,可以做什么?
字符串类型, 可以定义字符串变量指向字符串对象。
String是不可变字符串的原因?
string变量每次的修改其实都是产生并指向了新的字符串对象。
原来的字符串对象都是没有改变的,所以称为不可变字符串。
创建字符串对象的2种方式:
方式1:直接使用“”定义(推荐方式)
方式2:通过String类的构造器创建对象
有什么区别吗?
以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。
字符串的内容比较:
使用equals比较,只比较内容即可;== 比较的是内容和储存的存储地址。
String类方法
获取字符串长度 int length();
获取特定位置的字符 char charAt(int index);
获取特定字符的位置 int indexOf(char ch);
int indexOf(String str);
获取指定字符最后一个的位置 int lastIndexOf(char ch);
字符串的拼接 concat();
将字符数组转为字符串
String(char[] chs);
String(char[] chs, int offset, int count)
static String valueOf(char[] chs);
将字符串转为字符数组
char[] toCharArray();
字符串替换
String replace(char oldChar, char newChar);
String replaceAll(String old, String new);
切割字符串
String[] split(String regex);
截取字符串
String subString(int beginIndex);
String subString(int beginIndex, int endIndex); 要头不要尾
将小写字母转为大写字母
String toUpperCase();
将大写字母转为小写字母
String toLowerCase();
去除收尾空格的
String trim();
StringBuffer类
概念:
线程安全,可变的字符序列。 字符串缓冲区就像一个String,但可以修改。 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。
String类拼接是开辟另外一个内存 ,StringBuffer直接在缓冲区域的后面直接添加
StringBuilder(线程不安全的), 比StringBuffer(线程安全的)快 ,比String 快。
开发中遇到的String类型的数据偏多吗,所以用String用的比较多
public class Demo1 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("start");//默认缓冲区的容量为16
System.out.println(sb);//字符串的缓冲区 在堆区
sb.append("top");//在后面追加
System.out.println(sb);//是一个区域,随时可以向里面添加 的
//start 字符串和 starttop这个字符字符串在同一个内存地址里面
//如果是string 拼接字符串的话,他们不再同一个内存地址里面
sb.insert(3, "大");//在某一个位置插入一个数据
System.out.println(sb);//sta大rttop
//....
sb.delete(2, 4);// a大删除了 包含2 不包含4 要头不要尾
System.out.println(sb);
//咱们这个里面也牵涉到扩容
//确保最小瓶的容量。这个人家默认的是16 最低确保容量4567
//意味着要在内存开辟空间是耗内存的
sb.ensureCapacity(4567);//确保最低的容量
System.out.println(sb.length());//返回字符串的长度
}
}
StringBuilder类
概念:
StringBuilder是一个可变的字符串类,可以把它看成是一个对象容器
作用:提高字符串操作的效率,如拼接、修改等
构造器:
public StringBuilder
创建一个空白的可变的字符串对象,不包含任何内容。
public StringBuilder(String str)
创建一个指定字符串内容的可变字符串对象
枚举类
概念:
Java中枚举类是一个特殊的类,一般是表示一组常量,一年的4个季节。一年12个月份。一个星期有7天。方向东西南北等
public static final int a = 20;java 声明常量的方式
可以使用枚举代替常量
public class Test2 {
public static void main(String[] args) {
//使用枚举下面的常量
// Color c1 = Color.RED;
// System.out.println(c1);
printWeek(Week.FRI);
}
public static void printWeek(Week week){
switch(week){
case MON :
System.out.println("周一红烧肉");
break;
case TUR:
System.out.println("周二大盘鸡");
break;
case WEN :
System.out.println("周三烤鱼");
break;
case THUR:
System.out.println("周四火锅");
break;
case FRI :
System.out.println("周五烤全羊");
break;
case SRI :
System.out.println("周六北京烤鸭");
break;
case SUN :
System.out.println("周日吃灰");
break;
}
}
}
包装类
概念
每个基本数据类型在java中都有与之对应的包装类
包装类下面提供了很多的方法,让咱们对基本数据类型进行增删改查的操作
int====>Integer
byte===>Byte
short====>Short
long====>Long
float====>Float
double ===>Double
char===>Charater
boolean===>Boolean
除了int 和char 其他的包装了都是首字母大写
【重点】:
1.JDK1.5之后有装箱和拆箱之说
装箱:将基本数据类型转为包装类对象
拆箱:将包装类对象转为基本数据类型
2.***Value();将包装类对象转为基本数据类型的
3.parse****();将字符串转为基本数据类型
4.valueOf();将基本数据类型转为包装类
public class Demo5 {
public static void main(String[] args) {
byte a = (byte)20;//20 int 类型的数据->byte 大转小,但是javajdk1.5之后自动转了
Byte a1 = 20; //进行自动装箱的过程 将基本数据类型转为包装类对象
Byte byte1 = new Byte((byte)20);//将基本数据类型转为包装类
System.out.println(a1);
System.out.println(byte1);
Integer integer = new Integer(250);
int int1 = integer;//自动拆箱 将包装类对象转为基本数据类型
System.out.println(int1);
Character c1Character = 'A';//装箱
Boolean boolean1= true;
//将包装类对象转为基本数据类型的方法 ***Value()
Integer integer2 = new Integer(34);
int int2 = integer2.intValue();//返回值是int 类型的数据
System.out.println(int2);
Short short1 = new Short((short)45);
short short2 = short1.shortValue();
System.out.println(short2);
int v2 = Integer.parseInt("89");//开发要用 数字字符串
System.out.println(v2);//int类型的89
//一般如果怕精度丢失的的话,先用字符串来表示,然后再转为double
double d2 = Double.parseDouble("89.99999");
System.out.println(d2);
byte byte4 = 45;
Byte b4 = Byte.valueOf(byte4);//将 基本数据类型转为包装类
System.out.println(b4);
}
}
Math类
概念:
Math类是专门处理数学高级计算的类
Math全是静态方法,直接拿类名来调用的
方法:
public class Test4 {
public static void main(String[] args) {
//学习Math类方法
//绝对值
// System.out.println(Math.abs(- 9.8)); //9.8
// //求三个及以上数最大值
// //System.out.println(Math.max(Math.max(45,56),67));
// System.out.println(Math.max(Math.max(Math.max(34,56),789),45));
// //向上取整
// System.out.println(Math.ceil(5.3));//6
// //向下取整
// System.out.println(Math.floor(5.8));//5
// //四舍五入
// System.out.println(Math.round(4.5));//5
// //0~1的随机数
// System.out.println(Math.random());
// //随机出来0-100的数
// for (int i = 0; i < 20; i++) {
// System.out.println((int)(Math.random() * 100));
// }
//System.out.println((int)(Math.random()*100));
Random random = new Random();
//随机生成一个boolean类型数据
System.out.println(random.nextBoolean());
System.out.println(random.nextInt(34)+34);
}
}
System类
概念:
System类是系统类,提供了一静态的方法和静态的属性
方法:
public class Test5 {
public static void main(String[] args) {
// System.out.println("hallo");
// System.out.println(System.in);
// System.err.println("hhh");
//获取当前时间
// System.out.println(System.currentTimeMillis());
//获取电脑系统一些信息
Properties properties = System.getProperties();
System.out.println(properties.get("os.name"));//Mac OS X
System.out.println(properties.get("os.version"));//12.0.1
System.out.println(properties.get("user.name"));//flying
// System.out.println(properties.get("user.dir"));///Library/IDEACODE
System.out.println(properties.get("java.version"));//17.0.1
}
}
Runtime类
提供了java在运行时候的信息
方法:
public class Test6 {
public static void main(String[] args) {
//占位符
// String str = String.format("我的名字是%s","hh");
// System.out.println(str);
//Runtime类
Runtime runtime = Runtime.getRuntime();
System.out.println(runtime);//打印地址 java.lang.Runtime@4617c264
//jvm占用内存
System.out.println(runtime.maxMemory()/1024/1024);//2048M
//jvm空闲内存
System.out.println(runtime.freeMemory()/1024/1024);//127M
// runtime.exec();
}
}
Date类
专门处理电脑日期的一个类
public class Test7 {
public static void main(String[] args) {
//大多方法已弃用
Date d = new Date();
System.out.println(d);//Wed Jan 12 23:24:47 CST 2022
System.out.println(d.getTime());//1642001200702
System.out.println(d.getYear()+1900);
System.out.println(d.getMonth()+1);
}
}
Calendar类
方法:
public class Test8 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(Calendar.YEAR));//获取年
System.out.println(calendar.get(Calendar.MONTH));//获取月
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//获取当月的日
System.out.println(calendar.get(Calendar.WEDNESDAY));//星期x
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//这一年的第几天
System.out.println(calendar.get(Calendar.HOUR));//小时
System.out.println(calendar.get(Calendar.MINUTE));//分钟
System.out.println(calendar.get(Calendar.SECOND));//秒
//获取当前时间
Date time = calendar .getTime();
System.out.println(time);//Wed Jan 12 23:42:00 CST 2022
//格式化当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(time));//2022-01-12 23:45:26
}
}