常用类

常用类

Object类

getClass()方法

public final Class<?> getClass(){}
  • 返回引用中存储的实际对象类型
  • 应用:通常用于判断两个引用中实际存储对象类型是否一致
public static void main(String[] args) {
        Students s1 = new Students("张三",20);
        Students s2 = new Students("李四", 21);
        //判断s1和s2是否为同一个类型
        Class class1 = s1.getClass();
        Class class2= s2.getClass();
        
        if (class1 == class2){
            System.out.println("属于同一个类型");
        }else{
            System.out.println("不属于同一个类型");
        }
    }

hashCode()方法

public int hashCode(){}
  • 返回该对象的哈希码值。
  • 哈希值根据对象的地址或字符串或数字使用hash算法出来的int类型的数值。
  • 一般情况下行头对象返回相同哈希码。
//hashCode方法
System.out.println(s1.hashCode());//21685669
System.out.println(s2.hashCode());//2133927002
Students s3 = s1;
System.out.println(s3.hashCode());//21685669

toString()方法

public String toString(){}
  • 返回该对象的字符串表示(表达形式)。
  • 可以根据程序需求覆盖方法,如展示对象各个属性值。
System.out.println(s1.toString());//com.dai.common.Students@14ae5a5
System.out.println(s2.toString());//com.dai.common.Students@7f31245a
        //可以对方法进行重写显示我们需要看到的 快捷:Alt + insert
        /*
         @Override
        public String toString() {
            return "Students{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
         */
        //方法重写后toString显示的信息
        //Students{name='张三', age=20}
        //Students{name='李四', age=21}

equals()方法

public boolean equals(Object obj){}
  • 默认实现为(this == obj ),比较两个对象地址是否相同。

    System.out.println(s1.equals(s2));
    
  • 可以进行覆盖,比较两个对象的内容是否相同。

  • equals方法覆盖步骤:

    • 比较两个引用是否指向同一个对象。
    • 判断obj是否null。
    • 判断两个引用指向的实际对象类型是否为一致。
    • 强制转换类型
    • 比较各个属性值是否相同。
    	@Override
        public boolean equals(Object obj) {
            //1.判断两个引用是否指向同一个对象
            if (this == obj){
                return true;
            }
            //2. 判断obj是否为null
            if (obj == null){
                return false;
            }
            //3.判断两个引用指向的实际对象类型是否为一致,
            if (obj instanceof Students){
                //4.强制转换类型
                Students s = (Students)obj;
                //5.比较各个属性值是否相同
                if (this.name.equals(s.getName())&&this.age == s.getAge()){
                    return true;
                }
            }
            return false;
        }
    

包装类

  • 当基本类型转成引用类型时称为装箱:

    		int num = 10;
            Integer integer = new Integer(num);
            Integer integer1 = Integer.valueOf(num);
            System.out.println("装箱");
            System.out.println(integer);
            System.out.println(integer1);
    
  • 当引用类型转成基本类型时称为拆箱:

    		int num2 = integer.intValue();
            System.out.println("拆箱");
            System.out.println(num2);
    
  • JDK1.5后提供了自动拆箱与装箱,其实在低层编译器帮我们做一些事情,使用的就是1.5前的方法来帮助我们自动装拆

     		//装箱
            Integer intefer3 = age;
            System.out.println("装箱:"+age);
            //拆箱
            int age1 = intefer3;
            System.out.println("拆箱:"+age1);
    
  • 基本类型和字符串之间转换

    • 基本类型转换成字符串

      		int n1 = 255;
              //1.1使用“+”(但是这种方法可以但是不推荐)
              String s1 = n1+"";
              //1.2使用Integer中的toString()方法
              String s2 = Integer.toString(n1);
              String s3 = Integer.toString(n1, 16);//对应几进制,我现在输入对应的是16进制
      
              System.out.println(s1);//255
              System.out.println(s2);//255
              System.out.println(s3);//ff
      
    • 字符串转换成基本类型:

      		String n2 = "150";
              int i = Integer.parseInt(n2);//这边在进行转换是字符串不能包含字符,只能是数字。转化为浮点数时,应用Duoble.parse***()
              System.out.println(i);
      
    • boolean类型字符串转基本类型 只有是ture时才会是ture,其他都是false:

      		String b = "true";
              boolean b1 = Boolean.parseBoolean(b);
              System.out.println(b1);
      
  • Integer缓存区:

    • Java预先创建了256常用的整数(-128/127)包装类型对象。

    • 为什么要这样设计呢?答:在实际应用中应用比较频繁,对已创建的对象进行复用。

      public static void main(String[] args) {
              //面试题:判断以下对象是否相同
              Integer integer = new Integer(100);
              Integer integer2 = new Integer(100);
              System.out.println(integer == integer2);//false,它比较的是对象的引用地址
      
              Integer integer3 = 100;//自动包装:底层用的还是这个方法Integer.valueOf()
              Integer integer4 = 100;
              System.out.println(integer3 == integer4);//true
      
              Integer integer5 = 200;
              Integer integer6 = 200;
              System.out.println(integer5 == integer6);//false,整数缓存区(范围:-128--127)溢出
          }
      

String类

  • 字符串是常量(finnal),创建之后不可以改变
  • 字符串字面存储在字符串池,可以共享
 String s = "hello" ;//产生一个对象,字符池中存储
 String str1 = new String("hello");//产生两个对象,堆、池中各产生一个,运行时合并成一个。
 public static void main(String[] args) {
        String name1 = "hello" ;//hello 常量存储在字符池中,可以共享
        name1 = "world" ;//world赋值给name,给字符串赋值赋值时,并没有修改数据,而是在字符池中重新开辟内存赋值

        String name2 = "world";//字符池数据相同时,共享
        System.out.println(name1);
        System.out.println(name2);
        System.out.println(name1 == name2);

        String str1 = new String("java");//产生两个对象,堆、池各存储一个,运行时合并成一个
        String str2 = new String("java");
        System.out.println(str1 == str2);//比较的是内存大小
        System.out.println(str1.equals(str2));//字符串比较时使用equals()
    }

常用方法

 String content = "java是世界上最好的编程语言,使用java查找首次出现的位置,或使用java查找最后一次出现的位置";
  1. length()返回长度:

    System.out.println(content.length());//15:不管输入什么都算一个字符
    
  2. charAt()返回某个位置的字符:

    System.out.println(content.charAt(content.length()-1));//言:下标从0开始
    
  3. contains()判断字符是否在存在:

    System.out.println(content.contains("java"));//true
    
  4. toCharArray();返回字符串对应的数组:

    System.out.println(Arrays.toString(content.toCharArray()));//[j, a, v, a, 是, 世, 界, 上, 最, 好, .....]
    
  5. indexOf();返回字符首次出现的位置:

    System.out.println(content.indexOf("java"));
    System.out.println(content.indexOf("java",4));//第一个内容输入查找的字符串,第二个内容输入要从第几个开始查找
    
  6. lastIndexOf();返回字符最后出现的位置:

    System.out.println(content.lastIndexOf("java"));
    
  7. trim();去掉str前后的空格:

  8. toUpperCase();将小写转换为大写/toLowerCase();将大写转换为小写:

     String content2 = "    hello world    ";
            System.out.println(content2.trim());//hello world
            System.out.println(content2.toUpperCase());//    HELLO WORLD
            System.out.println(content2.toLowerCase());//    hello world
    
  9. endWith();判断是否为str结尾/startsWith();判断是否为str开头:

    String filename = "hello.java";
            System.out.println(filename.endsWith("java"));//true
            System.out.println(filename.startsWith("hello"));//true
    
  10. replace();用新的字符或者字符串替换掉老的:

    System.out.println(content.replace("java","pyhton"));
            //old:java是世界上最好的编程语言,使用java查找首次出现的位置,或使用java查找最后一次出现的位置
            //new:pyhton是世界上最好的编程语言,使用pyhton查找首次出现的位置,或使用pyhton查找最后一次出现的位置
    
  11. split();对字符进行拆分:

    		String say = "java is the beat programing  language.java good";
            String[] array = say.split("[ .]+");
            //当想使用多个符号(空格或者,)进行拆分时可以使用中阔号:"[ .]"
            //当语句中有多给空格是可以是用中括号加:“[ ]+”
            System.out.println(array.length);
            for (String s : array) {
                System.out.println(s);
            }
    
  12. 补充equals、compareTo:

    		String s1 = "hello";
            String s2 = "HELLO";
            System.out.println(s1.equals(s2));//false
            System.out.println(s1.equalsIgnoreCase(s2));//true:忽略大小写比较
     		
            //在string里比较
            String s3 = "abc";//97
            String s4 = "xyz";//120
            System.out.println(s3.compareTo(s4));//-23:从首字母中相对应的asc码减去s4对应首字母的asc码的
    
            String s5 = "abc";
            String s6 = "abcxyz";
            System.out.println(s5.compareTo(s6));//-3:当首字母相同,字符串长度不相同,这种情况就是按字符串的长度进行减法运算
    
  13. 练习题:

 public static void main(String[] args) {
        /**
         * 已知String str = "this is a text";
         * 将str中的单词单独获取
         * 将str中text替换为practice
         * 在text前面插入easy
         * 将每一个单词的首子母大写
         */

        String str = "this is a text";
        //将str中的单词单独获取
        String[] s = str.split(" ");
        for (String s1 : s) {
            System.out.println(s1);
        }
        //将str中text替换为practice
        String s2 = str.replace("text", "practice");
        System.out.println(s2);
        //在text前面插入easy
        String s3 = s2.replace("practice", "easy text");
        System.out.println(s3);
        //将每一个单词的首子母大写
        for (int i = 0; i <s.length ; i++) {
            char frist = s[i].charAt(0);
            //把首字母转为大写
            char upperfrist = Character.toUpperCase(frist);
            //将字符拼接输出
            String news = upperfrist + s[i].substring(1);
            System.out.print(news+" ");
        }
    }

可变长字符串

  • StringBuffer:可变长字符串,jdk1.0提供,运行效率慢,线程安全。

  • StringBuilder:可边长字符串,jdk5.0提供,运行效率快,线程不安全。

    //测试运行时间
    	public static void main(String[] args) {
         	//开始时间
            long start = System.currentTimeMillis();
            //String
            String str = "";
            for (int i = 0; i <9999 ; i++) {
                str+=i;
            }
            System.out.println(str);//4
    		
            //StringBuffer
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i <9999 ; i++) {
                sb.append(i);
            }
            System.out.println(sb);//3
    		
            //StringBuilder
            StringBuilder sbd = new StringBuilder();
            for (int i = 0; i <9999 ; i++) {
                sbd.append(i);
            }
            System.out.println(sbd);//2
            //结束时间
            long end = System.currentTimeMillis();
            System.out.println("用时:"+(end-start));
        }
    
    • 推荐使用:StringBuffer。
  • 最主要掌握四个方法,追加: append()、插入:insert()、删除:delete()、替换:replace()

        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer();
            //主要记住四个方法
            //1.append();追加
            sb.append("java真香");
            System.out.println(sb);
            sb.append("java是世界上最好的语言");
            System.out.println(sb);
            //2.replace();替换
            sb.replace(0,5,"python");
            System.out.println(sb);
            sb.replace(7,11,"pyhton");
            System.out.println(sb);
            //3.delete();删除
            sb.delete(0,7);
            System.out.println(sb);
            //4.insert();插入
            sb.insert(0,"java和");
            System.out.println(sb);
            //清空
            sb.delete(0,sb.length());
            System.out.println(sb.length());
    

    BigDecimal

            //面试题
    		double d1 = 1.0;
            double d2 = 0.9;
            System.out.println(d1-d2);//0.09999999999999998
    
            double result =(1.4-0.5)/0.9;
            System.out.println(result);//0.9999999999999999
    

    为什么上面的运算结果会有偏差呢?

    答:很多实际应用中需要精确运算,而double是近似值存储,不符合要求,需要借助BigDecimal!

    • 位置:java.math包中。
    • 作用:精确计算浮点数。
    • 创建方式:创建时注意参数要字符串类型
    BigDecimal bd1 = new BigDecimal("1.0");
    
    public static void main(String[] args) {
            double d1 = 1.0;
            double d2 = 0.9;
            System.out.println(d1-d2);//0.09999999999999998
    
            double result =(1.4-0.5)/0.9;
            System.out.println(result);//0.9999999999999999
    
    
            BigDecimal bd1 = new BigDecimal("1.0");
            BigDecimal bd2 = new BigDecimal("0.9");//一定要以字符串形式,不然运算出来还是不准确的
    
            //加法运算
            BigDecimal add = bd1.add(bd2);
            System.out.println(add);
    
            //减法
            BigDecimal subtract = bd1.subtract(bd2);
            System.out.println(subtract);
    
            //乘法
            BigDecimal multiply = bd1.multiply(bd2);
            System.out.println(multiply);
    
            //除法
            BigDecimal result1 = new BigDecimal("1.4")
                        .subtract(new BigDecimal("0.5"))
                        .divide(new BigDecimal("0.9"));
            System.out.println(result1);
            //进行除法运算时,如果不能准确计算出结果时,需要指定保留的位数和取舍方式
            BigDecimal d = new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
            System.out.println(d);
        }
    
    • 加:add
    • 减:subtract
    • 乘:multipily
    • 除:divide,主要掌握这四个方法
      • 除法注意点:
        • 除法:divide(BigDecimal bd , int scal,RoundingMode mode)
        • 参数 scal :指定精确到小数点后几位
        • 参数mode:
          • 指定小数部分的取舍模式,通常采用四舍五入的模式。
          • 取值为BigDecimal.ROUND_HALF_UP。

Date类

Date类(有好多方法被Calendar方法代替)

  • Date表示特定的瞬间,精确到毫秒。Date类中大部分方法都已经被Calendar类中的方法取代
  • 时间单位:
    • 1秒=1000毫秒;
    • 1毫秒=1000微秒;
    • 1微妙=1000纳秒;
    public static void main(String[] args) {
        Date date1 = new Date();//要选择java.util这个类
        //获取当前时间
        System.out.println(date1);//Sun Mar 21 23:21:22 CST 2021这个有点看不惯
        System.out.println(date1.toLocaleString());//2021-3-21 23:22:10 这个已经过时了
        //获取昨天这个点的时间
        Date date2 = new Date(date1.getTime() - (60 * 60 * 24 * 10000));
        System.out.println(date2.toLocaleString());//2021-3-11 23:25:39
        //2.after/before:判断是否为后/前一天
        boolean d1 = date1.after(date2);//date1是date2的后面一天吗?
        System.out.println(d1);//true
        boolean b1 = date2.before(date1);//date2是date1的前面一天吗?
        System.out.println(b1);//true

        //3.compareTo()比较
        int i1 = date1.compareTo(date2);//今天比昨天大吗?大时返回正1
        System.out.println(i1);//1
        int i2 = date2.compareTo(date1);//昨天比今天大吗?小时返回负1
        System.out.println(i2);//-1
        int i3 = date1.compareTo(date1);//相同时返回0
        System.out.println(i3);//0
        //4.比较是否相等equals()
        boolean e1 = date1.equals(date2);
        System.out.println(e1);//false

    }
  • 因为很多被Calendar类中的方法取代,暂时只理解这些。

Calendar类

  • Calendar提供了获取或设置各种日历字段的方法。

  • 构造方法:

    • protected Calendar():由于修饰符时protected(受保护的),所以无法直接创建对象。
  • 其他方法:

方法名说明
static Calendar get Instance()使用默认时区和区域获取日历
void set(int year,int month,int date,int hourofday,int minute,int second)设置日历的年、月、日、时、分、秒
int get(int field)返回给日历字段的值。字段比如年月日等
viod setTime(Date date)用给定的Date设置日历的时间。Date- Calendar
Date getTime()返回一个Date表示日历时间。Calendar-Date
void add(int field,int amount)按照日历的规则,给指定字段添加或减少时间量
long getTimeInMillies()毫秒为单位返回该日历的时间值
  • java月:在月的时候要注意 ,设计是0-11月,所以在输出的时候加1
    public static void main(String[] args) {
        //1.创建Calendar对象,由与是受保护的不能直接new,使用Calendar方法来获取
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime().toLocaleString());//由于toString()打印出来的不是想要的,使用这样的方法进行打印
        System.out.println(calendar.getTimeInMillis()+"毫秒");//获取毫秒值
        //2.获取时间信息
        //获取年
        int year = calendar.get(Calendar.YEAR);
        //月:在月的时候要注意 ,设计是0-11月,所以在输出的时候加1
        int month = calendar.get(Calendar.MONTH);
        //日
        int day = calendar.get(Calendar.DAY_OF_MONTH);//Date也是一样的
        //小时
        int hour = calendar.get(Calendar.HOUR_OF_DAY);//HOUR_OF_DAY是24小时的;HOUR是12小时的
        //分钟
        int minute = calendar.get(Calendar.MINUTE);
        //秒
        int second = calendar.get(Calendar.SECOND);
        System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second);//2021年3月22日1:6:36


        //修改时间
        Calendar calendar1 = Calendar.getInstance();
        calendar1.set(Calendar.YEAR,2022);
        System.out.println(calendar1.getTime().toLocaleString());//2022-3-22 1:06:36

        //add方法修改时间:add(要修改的时间,加(当前时间加1)/减(当前时间减1))
        calendar1.add(Calendar.HOUR_OF_DAY,-1);
        System.out.println(calendar1.getTime().toLocaleString());//2022-3-22 0:06:36

        //获取当月最大或者最小的值
        int max = calendar1.getActualMaximum(Calendar.DAY_OF_MONTH);
        int mini = calendar1.getActualMinimum(Calendar.DAY_OF_MONTH);
        System.out.println(max);//31
        System.out.println(mini);//1
    }

SimpleDateFormat

  • SimpleDateFormat是一个以语言环境有关的方式来格式化和解析日期的具体类
  • 进行格式化(日期-》文本)、解析(文本——》日期)。
  • 常用的时间模式字母:
字母日期或时间示例
y2019
M年中月份08
d月中天数10
H1天中小时数(0-23)22
m分钟16
s59
S毫秒367
  • 转换的时候要注意格式(年/月/日)
    public static void main(String[] args) throws ParseException {
        //1.创建SimpleDateFormat对象(年月日格式)
        //SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY/MM/dd");
        //2.创建Date
        Date date = new Date();
        //3.格式化data(将日期转成字符串)
        String f1 = sdf.format(date);
        System.out.println(f1);//2021/03/22

        //解析(将字符串转换为日期)
        Date date2 = sdf.parse("2021/08/23");//解析可能有异常,要在方法上抛出
        System.out.println(date2);//Sun Dec 27 00:00:00 CST 2020
    }

System类

  • System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的。
方法名说明
static void arraycopy(…);复制数组
stctic long currentTimeMillis();获取系统当前时间,返回的是毫秒值
static void gc();建议JVM赶快启动垃圾回收器回收垃圾
static void exit(int staus);建议JVM,如果参数是0表示正常退出JVM,非0表示异常退出JVM
public static void main(String[] args) {
        //arraycopy:数组的复制
        /**
         * src:源数组
         * srcPos:从那个位置开始复制
         * dest:目标数组
         * destPos:目标数组的位置
         * length:长度
         */

        int[] array = {10,20,50,44,66,45,65};
        int[] dest = new int[7];
        System.arraycopy(array,0,dest,0,array.length);

        for (int i = 0; i <array.length ; i++) {
            System.out.println(dest[i]);
        }

        //可以用这个方法计时
        long start = System.currentTimeMillis();
        for (int i = -99999999; i <99999999 ; i++) {
            for (int j =-99999999; j < 99999999; j++) {
                int result =i+1;
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("用时:"+(end-start));
    
        //退出JVM
        System.exit(0);
        System.out.println("程序结束了");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值