JAVA初步了解Java常用类

Java常用类

内部类

概念: 在一个类的内部再定义一个完整的类

public class Outer{
    
    
    class Inner{
    
    
        
    }
}

特点:

  1. 内部类在编译之后是可以生成独立的字节码文件的,如上代码生成的字节码文件名如下:

​ Outer外部类生成的字节码文件名:Outer.class(外部类名.class)

​ Inner内部类生成的字节码文件名:Outer I n n e r . c l a s s ( 外 部 类 名 Inner.class(外部类名 Inner.class(内部类名.class)

  1. 内部类可以直接访问外部类的私有成员,而不会破坏封装
  2. 可以为外部类提供必要的内部功能组件
public class Body{
    
    						//外部类
    private String name;				//定义一个外部类的私有成员
    
    class Header{
    
    						//内部类
        public void show(){
    
    				//内部类的方法
            System.out.println(name);	//在内部类的方法中直接调用外部类的私有属性name
        }
    }
}

内部类的分类

成员内部类

  1. 在类的内部定义,与外部类的实例变量,实例方法同级别的类
  2. 外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
  3. 当外部类,内部类存在重名属性时,会优先访问内部类的属性
  4. 内部类不能定义静态成员,但是可以定义静态常量
public class Body{
    
    					//外部类
    private String name;			//定义一个外部类的私有成员
    
    class Header{
    
    					//成员内部类
        public void show(){
    
    			//成员内部类的方法
            System.out.println(name);//在成员内部类的方法中直接调用外部类的私有属性name
        }
    }
}

静态内部类

  1. 不依赖外部类对象,可直接创界或通过类名访问,可声明静态成员
  2. 静态内部类不再与外部类的实例变量,实例方法同级别,而是与外部类同级别
public class Outer{
    
    
    
    //外部类
    private String name = "xiaohong";
    private int age = 18;
    
    //静态内部类,与外部类相同
    //只有静态内部类才能使用static修饰
    static class Inner{
    
    
        private String address = "上海";
        private String phono = "123456";
        //静态成员
        private static int count = 1000;
        
        public void show(){
    
    
            //调用外部类的属性,需要与其它外部类调用此外部类对象一样方式
            //1.先创建外部类对象
            Outer outer = new Outer();
            //2.调用外部类属性
            System.out.println(outer.name);
            System.out.println(outer.age);
            //调用静态内部类的属性和方法
            System.out.println(address); //或者this.outer
            System.out.println(photo);
            //调用静态内部类的静态属性
            System.out.println(Inner.count);
        }
        
    }
}

局部内部类

  1. 定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法
  2. 局部内部类访问外部类当前方法中的局部变量时,因为无法保证变量的生命周期与自身相同,变量必须修饰为final

匿名内部类

  1. 没有类名的局部内部类(一切特征都与局部内部类相同)
  2. 必须继承一个父类或者实现一个借口
  3. 定义类,实现类创建对象的语法合并,只能创建一个该类的对象
  4. 优点: 减少代码量
  5. 缺点:可读性较差

Object类

  1. 超类,基类,所有类的直接或间接父类,位于继承树的最顶层
  2. 任何类,如果没有书写extends显示继承某个类,那么都是默认直接继承Object类,否则为间接继承
  3. Object类中所定义的方法,是所有对象都具备的方法
  4. Object类型可以存储任何对象
    • 作为参数,可接受任何对象
      • 作为返回值,可返回任何对象

Object类常用方法

getClass()方法

  1. public final Class<?>getClass(){}
  2. 返回引用中存储的实际对象类型
  3. 应用:通常用于判断两个引用中实际存储对象类型是否一致

hashCode()方法

  1. public int hashCode(){}
  2. 返回该对象的哈希码值
  3. 哈希码值是根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
  4. 一般情况下相同对象返回相同哈希码值

toString()方法

  1. public String toString(){}
  2. 返回该对象的字符串表示(表现形式)
  3. 可以根据程序需求覆盖该算法,如:展示对象各个属性值

equals()方法

  1. public boolean equals(Object obj){}

  2. 默认实现为(this == obj),比较两个对象地址是否相同

  3. 可进行覆盖,比较两个对象的内容是否相同

    equals()方法覆盖步骤

    • 比较两个引用是否指向同一个文件
    • 判断obj是否为null
    • 判断两个引用指向的实际对象类型是否一致
    • 强制类型转换
    • 依次比较各个属性值是否相同

finalize()方法

  1. 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象
  2. 垃圾对象:没有有效引用指向此对象时,为垃圾对象
  3. 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
  4. 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
  5. 手动回收机制:使用System.gc();通知JVM执行垃圾回收

包装类

什么是包装类

  1. 基本数据类型所对应的引用数据类型
  2. Object可统一所有数据,包装类的默认值是null
基本数据类型 包装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

类型转换与装箱、拆箱

  1. 8种包装类型提供不同类型间的转换方式
    Number父类中提供的6个共性方法
    parseXXX()静态方法
    vauleOf()静态方法
  2. 注意:需保持类型兼容,否则抛出NumberFormatException异常

Integer整数缓冲区

  1. Java预先创建了256个常用的整数包装类型对象
  2. 在实际应用当中,对已创建的对象进行复用

String类

  1. 字符串是常量,创建之后不可改变
  2. 字符串字面值存储在字符串池中,可以共享

常用方法

public int length():返回字符串的长度

public char charAt(intindex):根据下标获取字符

public boolean contains(String str): 判断当前字符串中是否包含str

扫描二维码关注公众号,回复: 12915359 查看本文章

public char[] toCharArray();将字符串转换成数组

public int indexOf(String str):查找str首次出现的下标,存在则返回该下标,不存在则返回-1

public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引

public String trim():去掉字符串前后的空格

public String toUpperCase():将小写转换成大写

public String toLowerCase():将大写转换成小写

public boolean startWith(String str):判断字符串是否以str开头

public boolean endWith(String str):判断字符串是否以str结尾

public String replace(char oldChar,char newChar):将旧字符串替换成新字符串

public String[] split(String str):根据str做拆分

可变字符串

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

StringBuilder:可变长字符串,JDK5.0提供,运行效率块,线程不安全

BigDecimal类

  1. 位置:java.math包中
  2. 作用:精确计算浮点数
  3. 创建方式:BigDecimal bd = new BigDecimal(“1.0”);
//使用BigDecimal类解决浮点数计算不准确的问题
//此步骤相当于输入两个数1.0与0.9,记得要加"",输入的是字符串形式
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");

//对bd1和bd2做加法运算
BigDecimal r1 = bd1.add(bd2);   //相当于r1 = bd1 + bd2 ;
//对bd1和bd2做减法运算
BigDecimal r2 = bd1.subtraat(bd2);   //相当于r2 = bd1 - bd2 ;
//对bd1和bd2做乘法运算
BigDecimal r3 = bd1.multiply(bd2);   //相当于r3 = bd1 * bd2 ;
//对bd1和bd2做除法运算
BigDecimal r4 = bd1.divide(bd2);   //相当于r4 = bd1 / bd2 ;

//在除法运算中,如果两数之间无法除尽,会产生报错,可以使用下面的式子解决
//下面的式子表示:r5 = 10/3,保留五位小数,采用四舍五入的方式保留(ROUND_HALF_UP-->四舍五入)
BigDecimal r5 = new BigDecimal("10").divide(new BigDecimal("3"),5,BigDecimal.ROUND_HALF_UP);

时间表示

Date类

​ Date表示特定的瞬间,精确到毫秒,Date类中的大部分方法都已经被Calendar类中的方法所取代

Calendar类

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

  2. 构造方法:

    ​ protected Calendar();由于修饰符是protected,所以无法直接创建该对象

  3. 其他方法:

方法名 说明
static Calendar getInstance() 使用默认时区和区域获取日历
void set(int year,int month,int date,int hourofday,int minute,int second) 设置日历的年,月,日,时,分,秒
int get(int field) 返回给定日历字段的值,字段比如年,月,日等
void setTime(Date date) 用给定的Date设置此日历的时间,Date-Calendar
Date getTime() 返回一个Date表示此日历的时间,Calendar-Date
void add(int field,int amount) 按照日历的规则,给指定字段添加或减少时间量
long getTimeInMillis() 以毫秒为单位返回该日历的时间值
//创建Calendar对象
Calendar calendar = Calendar.getInstance(); 
//直接打印输出会发现内容很多,不是我们想要的,在后面加toLocaleString()获得我们熟悉的格式
System.out.println(calendar.getTime().toLocaleString());
System.out.println(calendar.getTimeInMillis());
//获取时间
//获取年
int year = calendar.get(Calendar.YEAR);
//获取月(获取的月份值范围为0-11,即为比实际月份小1)
int month = calendar.get(Calendar.MONTH);
//获取日
int day = calendar.get(Calendar.DAY_OF_MONTH); //或者Calendar.DATE
//获取小时 HOUR_OF_DAY获取的是24小时制时间 HOUR获取12小时制时间
int hour = calendar.get(Calendar.HOUR_OF_DAY);
//获取分钟
int minute = calendar.get(Calendar.MINUTE);
//获取秒
int second = calendar.get(Calendar.SECOND);

//修改时间,仅以日期为例,其他类似
//1.使用set将calendar时间里的日期修改为5
calendar.set(Calendar.DAY_OF_MONTH,5);
//2.使用add将calendar时间里的日期加1(若数字为负,则为减)
calendar.add(Calendar.DAY_OF_MONTH,1);

SimpleDateFormat类

  1. SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类

  2. 进行格式化(日期—>文本),解析(文本—>日期)

  3. 常用的时间模式字母:

字母 日期或时间 示例
y 2019
M 年中月数 08
d 月中天数 10
H 1天中小时数(0-23) 22
m 分钟 16
s 59
S 毫秒 367
//创建SimpleDateFormat对象
//设置时间的表示形式为xxxx年xx月xx日-xx(小时):xx(分钟):xx(秒)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日-HH:mm:ss");
//创建Date
Date date = new Date();
//格式化date(把日期转换成字符串)
String str = sdf.format(date);
//解析 (把字符串转换成日期)
//这里给出的时间1990年01月01日-01:00:00格式要与之前sdf里定义的时间格式相同
//若不相同,则无法解析,且会报错,需要抛出异常,在方法后接 throws Exception
Date date2 = sdf.parse("1990年01月01日-01:00:00");

System类

System系统类,主要用于获取系统的属性数据和其他操作,构造方法是私有的

方法名 说明
static void arraycopy(…) 复制数组
static long currentTimeMillis(); 获取当前系统时间,返回的是毫秒值
static void gc(); 建议JVM赶快启动垃圾回收器回收垃圾
static void exit(int status); 退出JVM,如果参数时0表示正常退出,非0表示异常退出
//arraycopy:数组的复制,包含五个参数
//src:源数组;srcPos:从源数组的哪个位置开始复制
//dest:目标数组;sestPos:从目标数组的哪个位置开始放入
//length:复制的长度
//如下表示从a数组里的a[3]开始复制,复制长度为4,即a[3]-a[6](a[3]-a[6]为4个长度,即4,5,6,7)
//将a[3]-a[7]放入b数组里,从b[1]开始依次往后放
int[] a = {
    
    1,2,3,4,5,6,7,8};
int[] b = new int[8];
System.arraycopy(a,3,b,1,4);

猜你喜欢

转载自blog.csdn.net/Hassder/article/details/109094774