javaSE基础06(final,常用类,基本数据类型的封装)

发布时间 2023-10-14 14:09:31作者: 卡皮巴拉
  • Final关键字(用法:类不想被人继承  ):
  1. 修饰类:最终的类,不可以被继承  比如String;
  2. 修饰方法:方法不可以被重写;
  3. 修饰属性:不可以被重新赋值,但是可以改变变量里的内容;
public class Student {
    String name;
    public static void main(String[] args) {
        final Student stu=new Student();
//        stu=new Student;新对象不能赋给stu
        stu.name="张三";
    }
  • 不可变量
  1. 成员不可变量  可以不直接赋值,但是必须再构造方法中赋值
  final int sex;//成员不可变量可以不直接赋值,但是必须再构造方法中赋值
    public Student() {
        sex=12;
    }
    public Student(int sex) {
        this.sex=sex;
    }
  • 常量
  1. 用public static final 来修饰;
  2. 常量名一般要大写;
  3. 必须给与初始值;(用static修饰才是类的);
  4. 也可以再静态代码块中初始化;
            public static final int a;
            static {
             a=23;
            }
  • object
  1. 所有的引用类型默认继承object;
  2. object是所有引用类型的超级父类;
  3. object中的属性和方法:toString equals  hashcode
  • == 和 .equals
  1. == 在引用类型中比较的是是否是同一个对象,比较内存地址是否是同一个;

  2. 在基本数据类型中==比较的是值是否是一样的;

  3. .equals  定义在Object里,比较引用类型的对象内容是否是一样,使用equals方法,自定义类中需要重写equals;

  4. String会重写Object里的equal方法,会判断字符串内容相不相等;

  • String
  1. 以值的方法声明字符串,  String str="123";

  2. String长度  String.length( ),原字符串永远不会发生变化;
  3. 获取字符串内容;
        str=new String("123");
            for(int i=0;i<str.length();i++){
                System.out.println(str.charAt(i));
            }
  4. 获取下标对应得字符charAt  

    char c=str.charAt(4);
  5. 截取字符串  substring
    String substr=str.substring(6,14);
    String substr=str.substring(6);//打印包括下标6在内的以后的所有数
    //substring(StartIndex,endIndex) 左闭右开
  6. 截取字符串的案例:
    //定义一个方法,接受一个字符串,接受一个整数num,将这个字符串切割成每num个字符为一段的数组 
        public static String[] accept0(String str, int num) {
            int count = str.length() / num + (str.length() % num == 0 ? 0 : 1);
            String[] strs = new String[count];
            for (int i = 0; i < count; i++) {
                if (str.length() <= num) {
                    strs[i] = str; 
                } else {
                    strs[i] = str.substring(0, num);
                    str = str.substring(num);
                }
            }
            return strs;
        }
  7. 查找子串出现的位置(下标)indexof;用法:总字符串.indexof("")  关键点:找不到对应的数据要返回-1;
    int index=str.indexOf("2023");//从前往后找
           index=str.lastIndexOf("2");//从后往前找 都找的第一遇到字符的位置
  8. 分割字符串;
        str="12345.123.4523.45";
        String[] arr=str.split("\\.");
    //regex正则表达式 .代表任意字符 \\.java转译 正则表达式转译 System.out.println(Arrays.toString(arr));
  9. 去除前后空白位置:
    str="  123   123   123";
    String res=str.trim();//去除前后空白位置
    System.out.println(res);
  10. 把字符都转换为小写或大写;
    //5把字符都转换为小写
            str.toLowerCase();
            //把字符转换为大写
            str.toUpperCase();
  11. 拼接字符串 + 拼接完得到的都是字符串;
            str="123"+"123"+str;
            str="123"+new Object();
            //+ 的优先级是一样的
            System.out.println(12+23+"");//35
            System.out.println(""+12+23);//1223
  12. 验证A串是否是B串的子串;
    public boolean method(String big,String small){
            if (big==null){
                return false;
            }
            int index=big.indexOf(small);
            return index!=-1;
        }
  13. 字符串拼接

    1. 因为字符串+拼接会产生很多中间量,并且这些中间量会永久占用空间; 
    2. 所以尽量避免使用+拼接字符串的形式,循环;
    3. 解决方案,使用一个数组存储要拼接的数据,拼接完成后转成字符串,可以有效避免中间量的生成;
    4. 工具类:
      1. StringBuilder;
                StringBuilder stringBuilder=new StringBuilder();
                //拼接
                stringBuilder.append("123");//追加
                for(int i=1;i<=9;i++){
                    stringBuilder.append(i);
                }
                String str=stringBuilder.toString();//拼接完成的数组转化成字符串
                System.out.println(str);
                //new StringBuilder(12)  StringBuilder对象的value书组长度默认是12
                //new StringBuilder("ab")创建StringBuilder对象并将”ab“拼接在value数组
        
                //默认长度
                //StringBuilder的value默认长度是16
                //扩容
                //原来容量的双倍+2
            }
      2. StringBuffer;
  • 随机数
  1. 第一种方法:double d=Math.random();
  2. 第二种方法:Random r =new Random()/(12)种子数;
  • math
  1. 向上取整  (得到的浮点型)
    double d1=Math.ceil(12.2222);//返回double类型  结果为13.0
  2. 向下取整
    double d2=Math.floor(12.99999);
  3. 四舍五入 (返回整数类型) double会返回long类型,float会返回int类型
    //正数四舍五入,负数五舍六入
            long l1=Math.round(12.2);//注意会隐式转换
  4. 取绝对值
    int a= Math.abs(-12);
  • 时间戳
        long ctm=System.currentTimeMillis();//返回当前时间
        System.out.println(ctm);
        System.gc();//呼叫垃圾回收
     system.exit(0)//退出,下面程序不会再进行
  1. 把Date数据类型转化成yyyy-MM-dd HH:mm:ss SSS类型,(返回当前时间)
            Date date =new Date();
            System.out.println(date);
            //把date日期格式化转化成yyyy-MM-dd HH:mm:ss SSS
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
            String sdfstr=sdf.format(date);
            System.out.println(sdfstr);
  • Calender 日历类
  1. 自定义时间
            //Calendar日历类 没有公共的构造方法 protected
            Calendar c=Calendar.getInstance();
            c.set(Calendar.YEAR,3023);//自定义年份
       int year =c.get(Calendar.YEAR);//获取定义的年份
  2. 将日历类型数据转化
            c.getTimeInMillis();//long类型,date对象的时间戳
            c.getTime();//返回当前的日历对象对应的Date对象
  • 基本数据类型的封装
  1. java为了达到万物皆对象的理念,每一个基本数据类型都提供了封装类型;
  2. 封装类型包括Byte Short Intrger Long Float Double Charcter;
  3. 字符串转成 int数组的方法;
    int num=Integer.parseInt("123");
  4. 装箱和封箱;
            Integer b=12;//装箱:将基本数据类型装缓存对应的封装类型
            int a=new Integer(12);//拆箱:将基本数据类型的封装类型的对象转化成基本数据类型的值
            //缓存
  5. 基本数据类型的封装类型:整数类型和字符类型会默认缓存-128~127每一个数值  浮点型没有缓存;
            Integer i4=212;
            Integer i5=212; 
            System.out.println(i4==i5);//超出封装范围 所以为false
       //Integer类型可以通过-XX:AutoBoxCacheMax 数值  来修改默认缓存的数组
  6. 基本数据类型的封装类型之间没有隐式转换;
            Integer i1=12;
            Byte b1=127;
    //      i1=b1;基本数据类型的封装类型之间没有隐式转化
  7. 不能使用双等号进行跨类比较;
    //        System.out.println(i1==b1);如:Integer和Byte
  8. valueOf("") 将其中的内容取出,转成当前类的类型;
            Integer u=Integer.valueOf("123");//将其中的内容取出,转成当前类的类型