java中的一些常用类

java中的一些常用类

Object类

hashcode()

返回该对象的哈希码值,默认情况下会根据对象的地址值计算
不同对象的hashCode()一般不会相同,但是同一个对象的hashCode()值肯定是相同的

public class TestObject01 {
    public static void main(String[] args) {
        Object obj1 = new Object();
        System.out.println(obj1.hashCode());
        Object obj2 = new Object();
        System.out.println(obj2.hashCode());

    }
}

返回的结果为:

2133927002
1836019240

toString()

返回对象的字符串表示形式。

Object obj1 = new Object();
System.out.println(obj1.toString());
//结果为		java.lang.Object@7f31245a

上面的结果不是我们想要的,所以一般都会进行toString()方法的重写

getClass()

Object obj1 = new Object();
Object obj2 = new Object();
Class class1 = obj1.getClass();
Class class2 = obj1.getClass();
System.out.println(class1==class2)
    //结果  true

equals()

判断两个对象是否相等,是通过地址来判断的

Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1.equals(obj2));
//结果为		false

可以对equals()进行重写,使其判断内容是否相等,相等为true,否则为false

clone()

创建并返回此对象的副本。

notify()

唤醒一个在这个对象的监视器上等待的单个线程。

wait()

使当前线程等待另一个线程调用此对象的方法

这三个方法都是和线程有关,这里就不多说明了

包装类

包装类都是位于java.lang中

什么是包装类:基本数据类型所对应的引用数据类型

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

在这八各类中,除了Character和Boolean类以外,其它六个都是“数字型”

//基本数据类型转为Integer对象
Integer i = Integer.valueOf(100);
//Integer类型转为int
int a = i.intValue();
//字符串转为Integer对象
Integer i = Integer.parseInt("334");
//Integer对象转为字符串
String str = i.toString();

自动装箱和拆箱:就是指再基本数据类型和包装类之间进行自动的转换

自动装箱:自动将基本数据类型的数据转化为包装类对象,而不需要手动转换

自动拆箱:相应的包装类对象自动转为基本数据类型的数据,而不需要手动转换

用一句话来总结就是:自动装箱过程是通过调用包装类的valueOf()方法来实现的,而自动拆箱过程则是通过调用包装类的##Value()方法实现的(##代表对应的基本数据类型,如intValue(),doubleValue())

Integer i = 100;//自动装箱
//相当于编译器自动为用户以下的操作
Integer i = Integer.valueOf(100);
//调用的是valueOf(100),而不是new Integer(100)

Integer i = 100;
int j = i;//自动拆箱
//相当于编译器自动为用户以下的操作
int j = i.intValue();

还有一个包装类的缓存问题

Integer i = 127;
Integer j = 127;
System.out.println(i == j);
System.out.println(i.equals(j));
Integer i = 1127;
Integer j = 1127;
System.out.println(i == j);
System.out.println(i.equals(j));

结果为

true
true
false
true

包装类在自动装箱时为了提高效率,对于-128~127之间的值会进行缓存处理。超过这个范围后,对象之间不能使用==进行数值比较,而应使用equals方法

String类

不可变性 final 操作量少推荐

位于java.lang包,默认会导入java.lang包下所有的类

String str1 = "a"+1+2;//a12
String str2 = 'a'+1+2;//d
String str3 = 1+2+"a";//3a

//a和b都会放进方法区的常量池里面,而c就是一个普通常量
String a ="cyg";
String b ="cyg";
String c = new String("cyg");
System.out.println(a == b);
System.out.println(b == c);
//输出结果
//true
//false
//通常我们比较字符串都是采用equals()方法,来比较他们的值是否一样
System.out.println(b.equals(c));
//输出true

下面来介绍一下String类中一些常用的方法

char charAt(int index)//返回指定索引的 `char`值。范围从 `0`到 `length() - 1`
boolean equals()//判断两个字符串是否相等,相等返回true,否返回false
boolean equalsIgnoreCase()//判断两个字符串是否相等(忽略大小写),相等返回true,否返回false
int indexOf()//从头开始查找某个字符在字符串的位置,找到返回,没有找到返回-1
int lastIndexOf()//从尾开始查找某个字符在字符串的位置,找到返回(返回的索引是从头开始数处的索引),没有找到返回-1
int length()//返回字符串的长度
String replace(a,b)//将字符串中所有的a换成b
boolean startsWith()//判断是否以某个字符串为开头,是返回true,否返回false
boolean endsWith()//判断是否以某个字符串为结尾,是返回true,否返回false
String subString(int index)//返回从索引处到末尾的字符串
String subString(int index,int index)//返回两个索引处之间的字符串
String toLowerCase()//将字母改成小写
String toUpperCase()//将字母改成大写
String trim()//去除收尾的空格

StringBuffer类

可变性 append() 多线程数据量较大,效率低,安全

StringBuffer 和 StringBuilder,方法都一样,就是两者的使用时机不同

StringBuilder类

可变性 单线程数据量大,效率高,不安全

除了String类中比较常用的方法,还有一些新的方法

append()//在尾部添加字符
reverse()//将字符串反转
setCharAt(int index,char a)//将指定索引处的字符替换成a
insert(int index,char a)//在指定索引处添加一个字符a
delete(int index,int index)//删除区间内的字符

Date类

位于java.util包下

Date(不推荐使用)

SimpleDateFormat yyyy-MM-dd HH:mm:ss

		//获取现在的时间,国外形式的
		Date date = new Date();
        System.out.println(date);
        //这里是指定时间格式,常用的三种
        SimpleDateFormat now1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat now2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        SimpleDateFormat now3 = new SimpleDateFormat("yyyy-MM-dd");
        //获取具体的时间,new Date()就是获取当前时间,并转换格式
        String str1 = now1.format(new Date());
        String str2 = now2.format(new Date());
        String str3= now3.format(new Date());
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);

结果

Tue Nov 03 21:15:23 CST 2020
2020-11-03 21:15:23
2020110321:15:23
2020-11-03

GregorianCalendar(建议使用)

		//获得日期的相关元素
        GregorianCalendar calendar = new GregorianCalendar(2020,11,3,21,35,12);
        int year = calendar.get(Calendar.YEAR);//获得年份
        int month = calendar.get(Calendar.MONTH);//获得月份
        int day = calendar.get(Calendar.DAY_OF_MONTH);//获得日,也可以是Calendar.DATE

        //可以这样设置,每个星期的第一天是星期几:
        calendar.setFirstDayOfWeek(Calendar.MONDAY);

        //获得星期几,1-7,1表示星期天,2表示星期一,...
        int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);

        //设置日期的相关元素
        GregorianCalendar c2 = new GregorianCalendar();
        c2.set(Calendar.YEAR,2018);

        //日期的计算
        GregorianCalendar c3 = new GregorianCalendar();
        c3.add(Calendar.YEAR,100);//往后一百年
        c3.add(Calendar.YEAR,-100);//往前一百年
        c3.add(Calendar.MONTH,2);

        //日期对象和时间对象对转化
        Date date = c3.getTime();

设计一个打印时间的方法

public static void main(String[] args) {
        GregorianCalendar c1 = new GregorianCalendar();
        printCalendar(c1);
    }
    public static void printCalendar(Calendar c){
        //打印时间+星期几
        int year = c.get(Calendar.YEAR);//获得年份
        int month = c.get(Calendar.MONTH)+1;//获得月份
        int day = c.get(Calendar.DAY_OF_MONTH);//获得日,也可以是Calendar.DATE
        int dayWeek = c.get(Calendar.DAY_OF_WEEK)-1;
        String dayWeek3 = "";
        switch (dayWeek){
            case 0:
                dayWeek3 = "日";
                break;
            case 1:
                dayWeek3 = "一";
                break;
            case 2:
                dayWeek3 = "二";
                break;
            case 3:
                dayWeek3 = "三";
                break;
            case 4:
                dayWeek3 = "四";
                break;
            case 5:
                dayWeek3 = "五";
                break;
            case 6:
                dayWeek3 = "六";
                break;
        }
        int hour = c.get(Calendar.HOUR);
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);
        System.out.println(year+"年"+month+"月"+day+"日"+" "+hour+"时"+minute+"分"+second+"秒"+" 周"+dayWeek3);
    }
//结果		2020年11月3日 10时19分21秒 周二

Random类

生成随机数

Random rand = new Random();
//随机生成[0,1)之间的double类型的数据
System.out.println(rand.nextDouble());
//随机生成[0,1)之间的float类型的数据
System.out.println(rand.nextFloat());
//随机生成True或者False
System.out.println(rand.nextBoolean());
//随机生成[0,10)之间的int类型的数据
System.out.println(rand.nextInt(10));
//随机生成[20,30)之间的int类型的数据
System.out.println(20+rand.nextInt(10));
//随机生成int类型允许范围之内的整形数据
System.out.println(rand.nextInt());
//随机生成[20,30)之间的int类型的数据,相比之下更复杂
System.out.println(20+(int)rand.nextDouble()*10);

Math类

常见的数学运算

		System.out.println(Math.abs(-2.0)); //绝对值
		System.out.println(Math.sqrt(64.0));  //立方根
		System.out.println(Math.max(56,78)); //两者之间较大的
		System.out.println(Math.min(56,78)); //两者之间较小的
		System.out.println(Math.random());  //随机数
		System.out.println(Math.pow(2,10));  //幂
		System.out.println(Math.ceil(18.36));  //向上取整
		System.out.println(Math.floor(18.66));  //向下取整
		System.out.println(Math.round(11.5));  //四舍五入
		System.out.println(Math.round(-11.5));  //四舍五入

输出结果

绝对值:2.0
立方根:8.0
两者之间较大的:78
两者之间较小的:56
随机数:0.8657276690731889
幂:1024.0
向上取整:19.0
向下取整:18.0
四舍五入:12
四舍五入:-11

File类

java.io.File类代表文件和目录。在开发中读取文件、生成文件、删除文件、修改文件的属性时会经常用到该类

相对路径:只有文件名

绝对路径:什么都很清楚,以磁盘开头

方法说明
public boolean exists()判断File是否存在
public boolean isDirectory()判断File是否有目录
public boolean isFile()判断File是否有文件
public long lastModified()返回FIle最后修改的时间
public long length()返回FIle大小
public String getName()返回文件名
public String getPath()返回文件的目录路径

创建文件或者目录

方法说明
createNewFile()创建新的File
mkdir()创建一个目录,中间某个目录缺失,则失败
mkdirs()创建一个目录,中间某个目录缺失,则创建该缺失目录
File f = new File("d:/b.txt");
f.createNewFile();//通过绝对路径来创建文件
File f = new File("d:/电影/华语/大陆") 
f.mkdir();//如果这里华语或者电影目录缺失,则大陆目录不会创建

f.mkdirs();//即使这里华语或者电影目录缺失,大陆目录也会创建,前面缺失的也会被创建

查看文件

//这里的"d:/b.txt"不是创建文件的意思,而是获取的意思
        File f = new File("d:/b.txt");
        System.out.println(f.exists());
        System.out.println(f.isDirectory());
        System.out.println(f.isFile());
        System.out.println(new Date(f.lastModified()));
        System.out.println(f.length());
        System.out.println(f.getName());
        System.out.println(f.getPath());

结果为

true
false
true
Wed Nov 04 10:56:40 CST 2020
0
b.txt
d:\b.txt

使用递归算法,以树状结构展示目录树

public static void printFile(File file,int leave){
    //输出层次数
    for(int i = 0;i<leave;i++){
        System.out.print("-");
    }
    //输出文件名
    System.out.println(file.getName());
    //如果File是目录,则获取子文件列表,并对每个子文件进行相同的操作
    if(file.isDirectory()){
        File[] files = File.listFiles();//列出所有的文件或者文件夹对象
        for(File temp : files){
            //递归调用该方法,注意leave+1
            printFile(temp,leave + 1);
        }
    }
}
public static void main(String[] args){
    File f = new File("d:/电影");
    printFile(f,0);
}

结果为:

电影
-华语
--大陆
---人民的名义.mp4
-好莱坞
--国王的演讲.mp4

修改文件

这里一般都不会进行这个操作

删除文件

File f = new File("d:/b.txt");
f.delete();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值