2021-3-21【javaSE学习 常用类】

常用类

内部类

概念:
  • 在一个类的内部再定义一个完整的类
特点:
  • 编译之后可以生成独立的字节码文件

  • 内部类可直接访问外部类的私有成员,而不破坏封装

  • 可为外部类提供必要的内部功能组件


成员内部类:
public class Outer{
    class Inner{
        
    }
}

//new一个成员内部类方法
Outer outer = new Outer();
Inner inner = outer.new Inner();

//一步到位
Inner inner = new Outer().new Inner();

//如果内部类和外部类的属性名相同,先访问内部类的属性
this.属性名
//访问外部类属性的方法
outer.this.属性名
    
//成员内部类不能包含静态成员,但可以包含静态常量(final)    

静态内部类:

静态内部类不依赖外部类,有外部类的所有特性。

public class Outer{
    private String name = "外部类"
    static class Inner{
        //可以有静态成员
        private static String name = "静态内部类";
        
        public void show(){
            //调用外部类的属性:
            //先创建外部类对象
            Outer outer = new Outer();
            //再调用外部类对象的属性
            outer.name;
        }
    }
}

//创建静态内部类对象
Outer.Inner inner = new Outer.Inner();

局部内部类

点一在外部类的方法当中,作用范围和创建对象仅限于当前方法中。

public class Outer{
    private String classname = "外部类"
    public void show(){
        //方法中不能加修饰符
        //定义局部变量
        String name = "方法";
        //局部内部类
        class Inner{
            //成员内部类不能包含静态成员,但可以包含静态常量(final)
            private String number = "110";
            private String email = "1061328535@qq.com";
            
            public void show2(){
                //访问外部类的属性(如果局部内部类在静态方法当中,不能访问外部类非静态类属性)
                Outer.this.classname//"外部类"
                //访问内部类的属性
                this.number
                this.email
                //访问局部变量,变量必须常量(final可省略,会自动添加)
                name//“方法”
            }
        }
        //需要在方法当中创建局部内部类对象,才能实现方法的内部类
        Inner inner = new Inner();
        inner.show2();
    }
}

//调用局部内部类
Outer outer = new Outer();
outer.show();

匿名内部类:

没有类名的局部内部类(一切特征都与局部内部类相同)

//必须继承一个父类或者一个接口
//接口
public interface Usb {
    //定义一个方法
    void service();
}

//父类
public abstract class Demo01 {
    public void show(){};
}

//匿名内部类优化局部内部类(相当于创建了一个局部内部类)
//实现接口
Usb fan = new Usb() {
    @Override
    public void service() {
        System.out.println("我是风扇!!!!!!!");
    }
};
//调用方法
fan.service;

//继承父类
Demo01 demo01 = new Demo01() {
     @Override
     public void show() {
         System.out.println("我继承了父类");
     }
};
demo01.show
  • 优点:节省代码
  • 缺点:可读性差

Object类

概念:
  • 类 Object 是类层次结构的根类。

  • 每个类都使用 Object 作为超类。

  • 所有对象(包括数组)都实现这个类的方法。

  • 简单来说就是,Object类是所有类的父类,包括我们所写的类,我们在使用类的时候就会利用Object类中的方法。

  • Object可统一所有数据,包装类的默认值时null


getClass()方法
  • 应用:通常用于判断两个引用中实际存储对象类型是否一致

hashCode()方法
  • 一般情况下相同对象返回相同的哈希值

toString()方法
  • 返回该对象的字符串表示

  • 可以根据程序需求覆盖(重写)该方法。


equals()方法
  • 默认实现为(this == obj),比较两个对象的地址是否相同

  • 可以根据程序需求覆盖(重写)该方法,比较两个对象的内容是否相等。

  • intanceof 判断对象是否是某种类型。


finalize()方法

(还不懂有什么用,好像很鸡肋)

  • 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。

  • 垃圾对象:没有有效引用指向此对象时,为垃圾对象。

  • 垃圾回收:由GC销毁垃圾对象,释放数据存储空间。

  • 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。

  • 手动回收机制:使用System.gc();通知JVM执行垃圾回收。


包装类

概述:
  • 基本数据类型所对应的引用数据类型

  • 包装类的默认值是null

基本数据类型包装类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter
  • 包装类将基本类型包装在一个对象中,给八大基本类型添加属性

类型转换与装箱、拆箱
  • 8种包装类型提供不同类型间的转换方式:

Number父类中提供的6个共性方法

​ (Integer为例子:)


        int num = 10;
        //类型转换:装箱,基本类型转成引用类型的过程
        Integer integer = new Integer(num);
        //拆箱
        integer.intValue();
        integer1.doubleValue();
        
        //JDK1.5之后,提供了自动装箱和自动拆箱
        int age = 20;
        //自动装箱
        Integer integer2 = age;
        //自动拆箱
        int age2 = integer2;

parseXXX()静态方法
		
		//基本类型和字符串之间的转换
        //1.基本类型转成字符串
        int n1 = 255;
        //1.1使用+号
        String s1 = n1+"";
        //1.2使用Integer的toString方法
        String s2 = Integer.toString(n1);
        //重载方法(转换为几进制)
        String s3 = Integer.toString(n1,16);
        System.out.println(s2);
        System.out.println(s3);
        
        //2.把字符串转变为基本类型
        String str = "150";
        //使用Integer.parseXXX();
        int i = Integer.parseInt(str);
        System.out.println(i);
        
        //boolean字符串形式转成基本类型,“true”-->true  非“true”-->false
        String str2 = "true";
        String str3 = "other";  //"false"
        boolean b = Boolean.parseBoolean(str2);
        System.out.println(b);

valueOf()方法
		//类型转换:装箱,基本类型转成引用类型的过程
		int num = 10;
		Integer integer1 = Integer.valueOf(num);

整数缓冲区
  • Java预先创建了256个常用的整数包装类型对象
		Integer integer = new Integer(100);
        Integer integer1 = new Integer(100);
        //equals 和 == 的区别
        System.out.println(integer == integer1);    //false 存放地址不同
        System.out.println(integer.equals(integer1));   //true

        /**这里的equals比较的是包装类中的内容是否相等
         * public boolean equals(Object obj) {
         *         if (obj instanceof Integer) {
         *             return value == ((Integer)obj).intValue();
         *         }
         *         return false;
         *     }
         */

        //自动装箱实际上运用了    Integer integer2 = Integer.valueOf(100);
        Integer integer2 = 127;
        Integer integer3 = 127;
        System.out.println(integer2 == integer3);   //true
        System.out.println(integer2.equals(integer3));  //true

        Integer integer4 = 200;
        Integer integer5 = 200;
        System.out.println(integer4 == integer5);   //false
        System.out.println(integer4.equals(integer5));  //true

        /**使用Integer.valueOf()方法,以下为他的源码
         * 其中low为-128,high为127,若输入的i在此区间内,则直接在cache[]这个数组中拿数据
         * 否则,new Integer(i);
         * 所以当使用Integer.valueOf()方法创建Integer对象时
         * 在区间-128~127之间的int,若值相同,则它们的地址一样
         *
         * public static Integer valueOf(int i) {
         *         if (i >= IntegerCache.low && i <= IntegerCache.high)
         *             return IntegerCache.cache[i + (-IntegerCache.low)];
         *         return new Integer(i);
         *     }
         */

String类

概述:
  • 字符串是常量,创建之后不可改变。

  • 字符串字面存储在字符串池(方法区/元空间)中,可以共享。

String name = "hello";
name = "sbbb";	//不可修改
String name2 = "sbbb"	//共享

String name3 = new String("java");
String name4 = new String("java");
sout(name3 == name4);	//输出false

如下图:

在这里插入图片描述


常用方法
		String  content = "java是世界上最好的编程语言java";
        //1.length()返回字符串的长度
        System.out.println(content.length());                               //15
        
        //2.charAt(int index)返回某个位置的字符
        System.out.println(content.charAt(content.length()-1));             //言
        
        //3.contains(String str)判断是否包含某个子字符串
        System.out.println(content.contains("java"));                       //true
        
        //4.toCharArray()返回字符串对应的数组
        System.out.println(Arrays.toString(content.toCharArray()));
        //[j, a, v, a, 是, 世, 界, 上, 最, 好, 的, 编, 程, 语, 言, j, a, v, a]

        //5.indexOf()返回字符串首次出现的位置
        System.out.println(content.indexOf("java"));                        //0
        System.out.println(content.indexOf("java真好"));					   //-1
        System.out.println(content.indexOf("java",5));        				//15
        
        //6.lastIndexOf()返回字符串最后一次出现的位置
        System.out.println(content.lastIndexOf("java"));                	//15
        
        //7.trim()去掉字符串前后的空格
        String conten2 = "  Hello World  ";
        System.out.println(conten2.trim());                                 //Hello World
        
        //8.toUpperCase()把小写改成大写    toLowerCase()把大写改成小写
        System.out.println(conten2.toUpperCase());                          //HELLO WORLD
        System.out.println(conten2.toLowerCase());                          //hello world
        
        //9.endWith(str)判断是否已str结尾  starWith(str)判断是否已str开头
        System.out.println(conten2.endsWith(" "));                          //true
        System.out.println(conten2.startsWith(" "));                        //true
        
        //10.replace(char old, char new)用新的字符或字符串来替换旧的字符或字符串
        System.out.println(content.replace("java", "php"));
        
        //11.split()对字符串进行拆分
        String say = "java is the best programing language,java";

        String[] arr = say.split("[ ,]+");      //空格或者括号可以连续出现多个
        System.out.println(arr.length);
        for (String s : arr) {
            System.out.println(s);
        }

        //12.equals()比较大小
        String s1 = "hello";
        String s2 = "HeLlo";

        System.out.println(s1.equals(s2));                                  //false
        //equalsIgnoreCase()忽略大小写的比较
        System.out.println(s1.equalsIgnoreCase(s2));                        //true
        
        //13.compareTo()暂时不常用

		//14.substring()方法截取某一段字符
        System.out.println(conten2.substring(5,10));                        //lo Wo

StringBuffer和StringBuilder
  • StringBuffer:可变长字符串,JDK1.0提供,运行效率慢,线程安全
  • StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全
		//两个都有一样的方法
        StringBuffer sb = new StringBuffer();
        StringBuilder sb2 = new StringBuilder();
        
        //1.append()追加
        sb.append("java世界第一");
        System.out.println(sb.toString());
        sb.append(",java真好");
        System.out.println(sb.toString());
        
        //2.insert()添加
        sb.insert(0,"我是最前面");
        System.out.println(sb.toString());
        
        //3.replace()替换
        sb.replace(0,6,"sb,");
        System.out.println(sb.toString());
        
        //4.delete()删除
        sb.delete(0, 2);
        System.out.println(sb.toString());

BigDecimal类

  • Java在java.math包中提供的API类BigDecimal
  • 用来对超过16位有效位的数进行精确的运算
  • 双精度浮点型变量double可以处理16位有效数
  • float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal
		//double类型的减法运算
        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println(d1-d2);                          //0.09999999999999998

        //BigDecimal类的使用
        BigDecimal bg1 = new BigDecimal("1.0");
        BigDecimal bg2 = new BigDecimal("0.9");

        //1.subtract()减法
        System.out.println(bg1.subtract(bg2));              //0.1
        //2.add()加法
        System.out.println(bg1.add(bg2));                   //1.9
        //3.multiply()乘法
        System.out.println(bg1.multiply(bg2));              //0.90
        //4.divide()除法      除不尽会报错,要说明保留多少位效数
        System.out.println(bg1.divide(bg2,2,BigDecimal.ROUND_CEILING));     //1.12

Date

  • 大部分方法已经被Calendar类代替

Calendar

  • 提供了获取或设置各种日历字段的方法
  • 构造方法 protected Calendar() : 由于修饰符是protected,所以无法直接创建该对象
		//1.创建Calendar对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime().toLocaleString());
        System.out.println(calendar.getTimeInMillis());

        //2.获取时间信息
        //年
        int year = calendar.get(Calendar.YEAR);
        //月 从0-11
        int month = calendar.get(Calendar.MONTH);
        //日
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        //小时
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        //分钟
        int minute = calendar.get(Calendar.MINUTE);
        //秒
        int second = calendar.get(Calendar.SECOND);
        System.out.println(year+"/"+(month+1)+"/"+day+"/"+hour+"/"+minute+"/"+second);

SimpleDateFormat类

  • 是一个以与语言环境有关的方式来格式化和解析日期的具体类
  • 进行格式化(日期–文本)、解析(文本–日期)
  • 常用的时间模式字母
GEra 标志符Text`示例
yYear1996; 96
M年中的月份MonthJuly; Jul; 07
w年中的周数Number27
W月份中的周数Number2
D年中的天数Number189
d月份中的天数Number10
F月份中的星期Number2
E星期中的天数TextTuesday; Tue
aAm/pm 标记TextPM
H一天中的小时数(0-23)Number0
k一天中的小时数(1-24)Number24
Kam/pm 中的小时数(0-11)Number0
ham/pm 中的小时数(1-12)Number12
mi小时中的分钟数Number30
s分钟中的秒数Number55
S毫秒数Number978
z时区General time zonePacific Standard Time; PST; GMT-08:00
Z时区RFC 822 time zone-0800
		//SimpleDateFormat的使用
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        Date date = new Date();
        //格式化(把日期转成字符串)
        System.out.println(sdf.format(date));

        //解析(把字符串转成日期)
        System.out.println(sdf.parse("2019年02月11日"));

System类

  • System系统类,主要用于获取系统的属性数据和其它操作
  • 构造方法是私有的,所以不用创建对象
  • 标准输入输出, 如out、in、err
  • 外部定义的属性和环境变量的访问,如getenv()/setenv()和getProperties()/setProperties()
  • 加载文件和类库的方法,如load()和loadLibrary()、
  • 快速拷贝数组的方法:arraycopy()
  • jvm操作:如gc()、runFinalization()、exit(),该部分并未在源码的java doc中提到,可能因为本身不建议主动调用吧。而且这几个方法都仅仅是Runtime.getRuntime()的调用,两者没有区别
  • 获取时间方法:System.nanoTime 和 System.currentTimeMillis

System类中提供了一些系统级的操作方法,这些方法实现的功能分别如下:

arraycopy方法public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
currentTimeMillis方法public static long currentTimeMillis()
exit方法public static void exit(int status)
gc方法public static void gc()

备注

  • 这是“奋进的叻叻”的第一篇java学习笔记
  • 所参考的视频是bilibili的“千锋教育-2020新版 Java常用类最新教程”

https://www.bilibili.com/video/BV1vt4y197nY?p=1


完结!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值