Java常用API(持续更新中---)

一.Object类/Scanner类

1.所有类都直接或间接继承Object类

如:a类继承b类,b类未显示集继承个类,那么b就是默认继承Object类. a类就是间接继承了Object类。
object 是所有类的祖先类,从jdk1.0开始就存在。

2.hashCode()方法:

返回该对象的哈希码值。哈希码值是int类型的对象逻辑地址值。

public class Test {
    public static void main(String[] args) {
        User user = new User();
        User user2 = new User();
       System.out.println(user.hashCode()+"---"+user2.hashCode());
    }
}
//控制台输出
356573597---1735600054

Process finished with exit code 0
3.getClass()方法:

返回此 Object 的运行时类对象(Class类型 ),Class类型对应的对象是字节码文件(.class文件)对象。因为在执行java程序的时候会把字节码文件加载进内存,jvm就认为这个字节码文件就是个字节码文件对象。

	 //返回此Object 的运行时类对象
	   Class clazz =user.getClass();
	   Class clazz2 = user2.getClass();
	   boolean a = clazz==clazz2;
    	System.out.println(a);
    	
     //Class类的一个方法getName()
        String name =clazz.getName();
        System.out.println(name);
    //控制台输出
    true
    com.cn.entity.User

4.toString()方法:

返回对象的文本表现形式,如果没有重写该方法,打印出的结果由三部分组成:
1,该对象的完整名称。
2,@字符。
3,十六进制的逻辑内存地址。

 public static void main(String[] args) {

        User user = new User();
        String s = user.toString();

        User user2 = new User();
        String s2 = user2.toString();
        
        System.out.println(s);
        System.out.println(s2);

    }
    //控制台输出
    com.cn.entity.User@1540e19d
	com.cn.entity.User@677327b6

结合上面可得出结论 toString()发法就是user2.getClass().getName() 加上user2.hashCode(); 我们看看源码:

 public String toString() {
 //Integer.toHexString()方法是将十进制的数字转成十六进制的文本
        return getClass().getName() + "@" + 
        Integer.toHexString(hashCode());
    }

我们再运行下代码看看效果:

 public static void main(String[] args) {
      User user = new User();
       String s = user.toString();

       User user2 = new User();

       String s2 = user2.toString();

       System.out.println("1."+s);
       System.out.println("2."+s2);
       System.out.println("3."+user2.getClass().getName()+"@"
               +Integer.toHexString(user2.hashCode()));

    }
    //控制台输出
    1.com.cn.entity.User@1540e19d
	2.com.cn.entity.User@677327b6
	3.com.cn.entity.User@677327b6

一般情况下我们都会使用开发工具快速重写toString()方法,我们来看看效果:

	//实体类中重写toString方法
	@Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
 //测试下效果
 public static void main(String[] args) {
        User user = new User("李四",18);
        String s = user.toString();

        User user2 = new User("张三",17);

        String s2 = user2.toString();

        System.out.println("1."+s);
        System.out.println("2."+s2);
        System.out.println("3."+user2.getClass().getName()+"@"
                +Integer.toHexString(user2.hashCode()));

    }
		//控制台输出
		1.User{name='李四', age=18}
		2.User{name='张三', age=17}
		3.com.cn.entity.User@1540e19d
5.equals()方法:

判断左右两边对象是否相等,返回true或false。这个方法可以说是面试官最喜欢问的问题之一,提到equals()就肯定绕不过和它有相似功能的 “==” ,我们也借着比较他们有什么不同来学习equals,来看代码:

 public static void main(String[] args) {
        User user1 = new User("李四",18);
        User user2 = new User("李四",18);
        User user3= new User("王五",18);
        User user4 =user1;
        //同样内容但不同对象 结果为---false
        boolean b = user1 == user2;
        System.out.println("1---"+b);
        //同样内容同一个引用对象 结果为---true  
        //***************得出结论:==比较两个对象的内存地址
        b= user1 == user4;
        System.out.println("2---"+b);

        //同样内容但不同对象 结果为---false
        b=user1.equals(user2);
        System.out.println("3---"+b);
        //同样内容同一个引用对象 结果为---true  
        //***************得出结论:equals比较两个对象的内存地址
        b=user1.equals(user4);
        System.out.println("4---"+b);

    }
		//控制台输出内容
		1---false
		2---true
		3---false
		4---true

从代码可以看出来,"=="和equals都是通过比较内存地址来判断的,而不在乎内容是否一致。既然都一样问什么面试官总是喜欢问这个? 我眉头一皱,觉得此事并不简单。

原来在我们下面要讲的String类里面,将equals()方法进行了重写,也就是说现在有三个东西来比较 : "=="运算符,Object类的equals()方法,String类的equals()方法。既然 “==” 和Object.equals()一模一样,那么面试官问的就是 :== 运算符和Sting.equals()有什么区别,我们来把这三个放一起看下:

	public static void main(String[] args) {
        User user1 = new User("李四",18);
        User user2 = new User("李四",18);
        User user3= new User("王五",18);
        User user4 =user1;
        //同样内容但不同对象 结果为---false
        boolean b = user1 == user2;
        System.out.println("1---"+b);
        //同样内容同一个引用对象 结果为---true  得出结论:==比较两个对象的内存地址
        b= user1 == user4;
        System.out.println("2---"+b);

        //同样内容但不同对象 结果为---false
        b=user1.equals(user2);
        System.out.println("3---"+b);
        //同样内容同一个引用对象 结果为---true  得出结论:equals比较两个对象的内存地址
        b=user1.equals(user4);
        System.out.println("4---"+b);

        String x ="张三";
        String y ="张三";
        String z =x;
        //同样内容但不同对象 结果为---true
        b = x.equals(y);
        System.out.println("5---"+b);
        //同样内容,引用同样对象 结果为---true
        b = x.equals(z);
        System.out.println("6---"+b);

    }
		//控制台输出内容
		1---false
		2---true
		3---false
		4---true
		5---true
		6---true

到这里,事情水落石出,String.equals()只关注你内容是否相同。和**==**运算符,Object.equals()都不一样。

6.finalize()方法:

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

7.clone()方法:

复制一个新的对象,我们通过比较==User user2 =user1;==和clone()有何差异来学习,想要使用对象的clone()方法,需要有三个准备工作:
1,实体类中实现Cloneable(标记接口)。

public class User extends Object implements Cloneable

2,重写clone()方法。

@Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

3,使用时抛出CloneNotSupportedException异常。

public static void main(String[] args) 
		throws CloneNotSupportedException

准备工作完成后我们写代码比较一下:

 public static void main(String[] args) throws CloneNotSupportedException{
        User user1 = new User("李四",18);
        User user2=user1;
        //克隆user1
        Object clone = user1.clone();
        System.out.println("user1---"+user1);
        System.out.println("user2---"+user2);
        System.out.println("clone---"+clone);
        System.out.println("------改变user1后------");
        //改变user1的内容
        user1.setName("王五");
        user1.setAge(14);
        System.out.println("user1---"+user1);
        System.out.println("user2---"+user2);
        System.out.println("clone---"+clone);
    }

控制台输出内容:

user1---User{name='李四', age=18}
user2---User{name='李四', age=18}
clone---User{name='李四', age=18}
------改变user1后------
user1---User{name='王五', age=14}
user2---User{name='王五', age=14}
clone---User{name='李四', age=18}

根据输出内容,我们可以得出这样的结论:
1.User user2 =user1;使用这样复制的对象,新对象会随着引用的对象的值改变而改变。
2.使用clone()方法复制的对象是一个全新的对象,与被复制对象并无关系,值不会随着被复制对象改变而改变。

二.String类/StringBuffer类/StringBuilder类

三.数组高级和Array类

四.基本类型包装类(Integer,Character)

五.正则表达式

六.Math类/Random类/System类

七.BigInteger类/BigDecimal类

八.Date类/DateFormat类/Calender类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杳没孤鸿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值