java 常见类_java常用类

Java常用类

内部类

内部类大体分为四种:

成员内部类

静态内部类

局部内部类

匿名内部类

成员内部类

//外部类

public class Outer{

private String name = "张三";

//...

public class Inner{

//成员内部类

private String name = "李四";

//private static int age = 18;//不被允许

private static final int age = 18;//静态常量,允许

public void show(){

System.out.println(Outer.this.name);

}

//...

}

}

成员内部类可以访问外部类的私有属性

如果成员内部类的属性和外部类的属性重名,但是想要使用外部类的属性的时候可以使用“外部类类名.this.属性名”。eg:Outer.this.name

成员内部类不能定义静态成员

可以包含静态常量

关于如何创建内部类对象:

Outer out = new Outer();

Inner in = out.new Inner();

内部类对象的创建必须依赖外部类对象

静态内部类

public class Outer{

private String name = "张三";

private int age = 20;

//静态内部类,和外部类相同

public static class Inner{

private String address = "地球";

private static int age = 18;//静态成员是允许的

public void show(){

//调用外部类属性

Outer outer = new Outer();

System.out,println(outer.name);

System.out,println(outer.age);

//调用内部类属性

System.out,println(address);

//调用静态属性

System.out,println(Inner.age);

}

}

}

关于静态内部类调用外部类属性:

先创建外部类对象

调用内部类对象的属性

直接创建静态内部类对象

Outer.Inner in = new Outer.Inner();

局部内部类

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

public class Outer {

private String name = "张三";

private int age = 18;

public void show(){

String address = "上海";

//局部内部类:不能加任何访问修饰符

class Inner{

private String phone = "121321-123";

private String email = "123@qq.com";

public void show1(){

//访问外部类属性

System.out.println(Outer.this.name);

System.out.println(age);

//访问内部类属性

System.out.println(this.phone);

System.out.println(email);

//访问局部变量,jdk1.7,变量必须加final,jdk1.8自动添加fianl

System.out.println(address);

}

}

//创建局部内部类对象

Inner in = new Inner();

in.show1();

}

}

创建局部内部类对象需要在方法体内创建,进而使用。

访问局部变量的时候,jdk1.7中变量必须加final,jdk1.8自动添加fianl

匿名内部类

类似于没有类名的局部内部类

必须继承一个父类或实现一个接口

//接口Usb

public interface Usb{

void service();

}

//Test类

public class Application {

public static void main(String[] args) {

//匿名内部类

Usb usb = new Usb(){

@Override

public void service(){

System.out.println("风扇开始工作...");

}

}

usb.service();

}

}

Object类

超类、基类,所有类的直接或者间接父类,继承树的最顶层

任何类如果没有extends某个类,都是直接继承Object类,否则就是间接继承Object类

Object类中所定义的方法,是所有对象都具备的方法

Object类型可以存储任何对象

getClass()方法

示例代码:

package com.huaji.demo3;

public class Person {

public int id;

private String name;

public Person(int id, String name) {

super();

this.id = id;

this.name = name;

}

}

package com.huaji;

import com.huaji.demo3.Person;

public class Application {

public static void main(String[] args) {

Person p = new Person(1,"huaji");

System.out.println(p.getClass());

System.out.println(p.getClass().getName());

System.out.println(p.getClass().getSimpleName());

System.out.println(p.id);

}

}

运行结果:

class com.huaji.demo3.Person

com.huaji.demo3.Person

Person

1

getClass()方法是获得调用该方法的对象的类;getClass().getName()可以得到该类的路径;

通过getClass()方法得到该对象类Class后,可以通过Class获取这个类中的相关属性和方法;

hashCode()方法

public int hashCode(){}

返回该对象的哈希码值

哈希值是根据对象的地址或字符串或字符串使用hash算法计算出来的int类型的数值

一般情况下相同的对象返回相同哈希码

public class Application {

public static void main(String[] args) {

Person p = new Person(1,"huaji");

System.out.println(p.hashCode());

}

}

356573597

toString()方法

public String toString(){}

返回该对象的字符串表示

可以根据需求覆盖此方法

equals()方法

public boolean equals(Object obj){}

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

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

关于重写equals为比较俩对象内容是否相同:

public class Student{

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

private String name;

@Override

public boolean equals(Object obj) {

//1.判断两对象是否是同一个引用

if (this==obj){

return true;

}

//2.判断obj是否null

if (obj==null){

return false;

}

//3.判断是否是同一类型

if (obj instanceof Student){

//4.强制类型转换

Student s = (Student)obj;

//5.判断属性是否相等

if (this.name.equals(s.getName()))

return true;

}

return false;

}

}

finalize()方法

protected void finalize() throws Throwable { }

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

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

垃圾回收:由GC销毁垃圾对象,释放数据存储空间(Garbage Collection,垃圾收集,垃圾回收)

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

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

使用情况:

finalize()方法中一般用于释放非Java 资源(如打开的文件资源、数据库连接等),或是调用非Java方法(native方法)时分配的内存(比如C语言的malloc()系列函数)。

为什么避免使用:

首先,由于finalize()方法的调用时机具有不确定性,从一个对象变得不可到达开始,到finalize()方法被执行,所花费的时间这段时间是任意长的。我们并不能依赖finalize()方法能及时的回收占用的资源,可能出现的情况是在我们耗尽资源之前,gc却仍未触发,因而通常的做法是提供显示的close()方法供客户端手动调用。

另外,重写finalize()方法意味着延长了回收对象时需要进行更多的操作,从而延长了对象回收的时间。

包装类

基本数据类型所对应的引用数据类型。eg:int->Integer,byte->Byte,float->Float.....

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

类型转换

装箱

基本类型转换成引用类型的过程

int num=10;

//使用Integer类创建对象

Integer integer=new Integer(num);//方法一

Integer integer1=Integer.valueOf(num);//方法二

拆箱

引用类型换成基本类型转的过程

Integer integer=new Integer(100);

int num=Integer.intValue();//jdk1.5之前的方式

jkd1.5以后,Java提供自动装箱拆箱

int age=10;

//自动装箱

Integer integer=age;

//自动拆箱

int age1=integer;

基本类型和字符串之间转换

基础类型转换成字符串的过程

int n=100;

//1.使用+

String s1=n+"";

//2.使用Integer的toString()方法

String s2=Integer.toString(n);

字符串转换成基础类型的过程

String str="150";

//使用Integer。parseXXX()

int n=Integer.parseInt(str);

String 类

String对象的值存储在字符串常量池中,常量池位于堆内存中

字符串的比较中,“==“表示的是对地址的比较,equals的话,先比较引用,如果引用相等,返回值为true,如果引用不相等,再比较值,如果值相等,返回值也是true,只有当引用和值都不相等的情况下,返回的才是false。

new的话会在堆中创建一个对象,一个new对应一个对象

String s1=new String("张三");

String s2=new String("张三");

System.out.println(s1==s2);//false,由于==比较的是地址,尽管内容都是“张三”,但是s1和s2在栈中对应不同的地址

String s3="张三";

String s4="张三";

System.out.println(s3==s4);//true,s1指向字符串常量池中的“张三”,s4也指向字符串常量池中的“张三”,所以它两地址相同

int length();  语法:字符串变量名.length();  返回值为 int 类型。得到一个字符串的字符个数(中、英、空格、转义字符皆为字符,计入长度)

char charAt(值);  语法 :字符串名.charAt(值);  返回值为 char 类型。从字符串中取出指定位置的字符

char toCharArray();  语法 :字符串名.toCharArray();  返回值为 char 数组类型。将字符串变成一个字符数组

int indexOf("字符")  语法 :字符串名.indexOf("字符");字符串名.indexOf("字符",值);查找一个指定的字符串是否存在,返回的是字符串的位置,如果不存在,则返回-1 。 in lastIndexOf("字符") 得到指定内容最后一次出现的下标

toUpperCase(); toLowerCase();字符串大小写的转换

String[] split("字符")  根据给定的正则表达式的匹配来拆分此字符串。形成一个新的String数组。

boolean equals(Object anObject)  语法 :字符串变量名.wquals(字符串变量名);  返回值为布尔类型。所以这里用 if 演示。比较两个字符串是否相等,返回布尔值

trim();  去掉字符串左右空格  replace(char oldChar,char newChar);新字符替换旧字符,也可以达到去空格的效果一种。

String substring(int beginIndex,int endIndex)  截取字符串,beginIndex表示索引开始的位置,endIndex表示索引结束的位置

boolean equalsIgnoreCase(String) 忽略大小写的比较两个字符串的值是否一模一样,返回一个布尔值

boolean contains(String) 判断一个字符串里面是否包含指定的内容,返回一个布尔值

boolean startsWith(String)  测试此字符串是否以指定的前缀开始。返回一个布尔值

boolean endsWith(String)  测试此字符串是否以指定的后缀结束。返回一个布尔值

String replaceAll(String,String) 将某个内容全部替换成指定内容,String repalceFirst(String,String) 将第一次出现的某个内容替换成指定的内容

StringBuffer类和StringBuilder类

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

StringBuilder:可变长字符串,jkd1.5提供,运行效率快、线程不安全

都比String效率高、节省内存

StringBuffer sb=new StringBuffer();

//StringBuild sb=new StringBuild();

//1.append();追加

sb.append("java世界第一");

System.out.println(sb.toString());

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,5,"hello");

System.out.println(sb.toString());

//4.delete();删除

sb.delete(0,5);

System.out.println(sb.toString());

运行结果:

java世界第一

java世界第一java真香

java世界第一java真香java太香啦

我在最前面java世界第一java真香java太香啦

hellojava世界第一java真香java太香啦

java世界第一java真香java太香啦

BigDecimal类

由于float、double都是近似值存储,所有此类数据进行运算的话会产生误差,尽管误差不大,但在某些需求高精度的领域就会产生影响,所以引进使用BigDecimal类

java.math包内

一般想要精确计算的话,传进的值尽量使用字符串形式

BigDecimal bd1=new BigDecimal("1.0");

BigDecimal bd2=new BigDecimal("0.9");

//减法

BigDecimal r1=bd1.subtract(bd2);

System.out.println(r1);

//加法

BigDecimal r2=bd1.add(bd2);

System.out.println(r2);

//乘法

BigDecimal r3=bd1.multiply(bd2);

System.out.println(r3);

//除法

BigDecimal r4=new BigDecimal("1.4")

.subtract(new BigDecimal("0.5"))

.divide(new BigDecimal("0.9"));

System.out.println(r4);

运行结果:

0.1

1.9

0.90

1

除法:divide(BigDecimal bd,int scal,RoundingMode mode) 参数scal:制定精确到小数点后几位 参数mode:指定小数部分的取舍模式,通常使用四舍五入(BigDecimal.ROUND_HALF_UP)

Date类

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

Calendar类

Calendar为抽象类,无法直接创建对象使用,里面有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象。static Calendar getInstance() 使用默认时区和语言环境获取一个日历

// 多态

Calendar c = Calendar.getInstance();

Syste.out.println(c);

get方法

​public int get(int field):返回给定日历字段的值

​ 参数:传递指定的日历字段(YEAR,MONTH...)

返回值:日历字段代表的具体的值

Copypublic static void main(String[] args) {

demo01();

}

public static void demo01(){

// 使用getInstance方法获取Calendar对象

Calendar c = Calendar.getInstance();

System.out.println(c);

int year = c.get(Calendar.YEAR);

System.out.println(year);

int mouth = c.get(Calendar.MONTH);

// 西方月份0-11 东方月份1-12

System.out.println(mouth);

int date = c.get(Calendar.DAY_OF_MONTH);

System.out.println(date);

int date2 = c.get(Calendar.DATE);

System.out.println(date2);

}

set方法

​public void set(int field,int value):将给定的日历字段设置为给定值

参数:

​ int field:传递指定的日历字段(YEAR,MONTH...)

​ int value:给指定的字段设置值

Copypublic static void main(String[] args) {

demo02();

}

public static void demo02(){

// 使用getInstance方法获取calendar对象

Calendar c = Calendar.getInstance();

System.out.println(c);

c.set(999,6,6);

// 获取年

c.set(Calendar.YEAR,666);

int year = c.get(Calendar.YEAR);

System.out.println("系统时间:"+year);

System.out.println("重新设置年::"+year);

// 重新设置月

c.set(Calendar.MONTH,6);

int month = c.get(Calendar.MONTH);

System.out.println("月份:"+month);

// 重新设置日

c.set(Calendar.DATE,11);

// 获取日

int date = c.get(Calendar.DATE);

System.out.println(date);

c.set(999,6,6);

System.out.println(year+"年"+month+"月"+date+"日");

}

add方法

public abstract void add(int field,int amount):根据日历的规则,得指定的日历字段添加或者减去指定的时间量把指定的字段量增加/减少指定的值

参数:

int field:传递指定的日历字段(YEAR,MONTH...)

int amount:增加/减少指定的值

正数:增加

负数:减少

public static void main(String[] args) {

demo03();

}

public static void demo03(){

Calendar c = Calendar.getInstance();

// 增加两年

c.add(Calendar.YEAR,2);

int year = c.get(Calendar.YEAR);

System.out.println(year);

// 减少两个月

c.add(Calendar.MONTH,-1);

int month = c.get(Calendar.MONTH);

System.out.println(month);

}

getTime方法

Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。

格式:

​public Date getTime():返回一个表示此calendar时间值(从历元到现在的毫秒值偏移量)的Date对象

把日历对象,转换为日期对象

public static void main(String[] args) {

demo04();

}

public static void demo04(){

// 使用getInstance方法获取calendar对象

Calendar c = Calendar.getInstance();

Date date = c.getTime();

System.out.println(date);

// Thu Mar 12 23:20:35 CST 2020

}

SimpleDateFormat类

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

进行格式化(日期->文本)

解析(文本->日期)

public static void main(String[] args) throws ParseException {

//1.创建SimpleDateFormat对象y年M月

SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");

//2.创建Date

Date date=new Date();

//格式化date

String str=sdf.format(date);

System.out.println(str);

//解析

Date date1=sdf.parse("2008年08月08日08:08:08");

System.out.println(date1);

}

运行结果:

2020年09月15日21:49:28

Fri Aug 08 08:08:08 CST 2008

System类

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

static void arraycopy(...) 复制数组

static long currentTimeMillis() 获取当前系统时间,返回的是毫秒值

static void gc() 建议JVM赶快启动垃圾回收器回收垃圾

static void exit(int status) 退出JVM,如果参数是0表示正常退出JVM,非0表示异常退出JVM

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值