Java基础之匿名内部类、包装类
Java基础之匿名内部类、包装类,博智网带你了解详细信息 。
目录
- 1、匿名内部类
- 2、Object类简介
- 2.1 取得对象信息toString()
- 2.2 对象的比较equals()
- 2.3 Object接口引用数据类型
- 3、包装类
- 3.1 装箱与拆箱
- 3.2 字符串与基本数据类型的转换
- 3.3 包的定义
- 3.4 包的导入
- 4、访问控制权限
- 5、jar命令
1、匿名内部类内部类:在一个类的内部定义了另外的类,称为内部类,匿名内部类指的是没有名字的内部类 。为了清楚内部类的主要作用,下面首先观察一个代码 。
interface IMessage{ public void print();}class MessageImpl implements IMessage{//定义接口实现类 public void print(){System.out.println("Hello World"); }}class Demo{ public static void get(IMessage msg){//接受接口对象msg.print(); }}public class TestDemo1{ public static void main(String args[]){IMessage msg = new MessageImpl();//子类为接口实例化Demo.get(msg);//传递msg对象 }}
如果说现在MessageImpl这个子类只使用一次,有必要按照以上的方式进行定义吗?
这个时候MessageImpl就没有什么意义了,但是可以利用匿名内部类的概念来解决此问题 。匿名内部类是在抽象累和接口的基础之上发展起来的 。
interface IMessage{ public void print();}class Demo{ public static void get(IMessage msg){//接受接口对象msg.print(); }}public class TestDemo1{ public static void main(String args[]){IMessage msg = new IMessage(){//匿名内部类public void print(){System.out.println("hello,world!");}};Demo.get(msg);//传递msg对象 }}
结论:基本上搞匿名内部类都应该在接口或抽象类形式上完成 。
在抽象类中使用匿名内部类
abstract class Message{ public void print(){System.out.print(this.getInfo()); } public abstract String getInfo();}class Demo{ public static void get(Message msg){//接受接口对象msg.print(); }}public class TestDemo1{ public static void main(String args[]){Demo.get(new Message(){public String getInfo(){return "www.baidu.com";}});//传递msg对象 }}
强调:一个普通类进行不要再去有子类进行继承,能够继承的只是抽象类和接口,所以在普通类上继续使用
匿名内部类的形式来定义子类,但是在正常的开发逻辑上是错误的 。
2、Object类简介在Java的定义之中,除了Object类之外,所有的类实际上都存在继承关系,即:如果现在定义了一个类,没有默认继承任何一个父类的话,则默认讲继承Object类,以下两种类最终定义效果是完全一样的 。
Object类的无参构造是专门子类提供服务的 。
方法名称类型描述public String toString()普通取得对象信息public boolean equals(Object obj)普通对象的比较public int hashCode()普通返回对象的哈希码值
2.1 取得对象信息toString()toString()的核心目的在于取得对象信息 。相当于替换了getInfo()方法的功能 。
class Person{ private String name; private int age; public Person(String name, int age){this.name = name;this.age = age; } public String toString(){return "name = " + this.name + ",age = " + this.age ; }}public class TestDemo2{ public static void main(String args[]){Person p = new Person("zsr",18);System.out.print(p.toString()); }}
2.2 对象的比较equals()实际上对于equals()方法应该并不陌生,这个方法在String类中见过,String是Object类的子类,所以String类的equals()方法就是覆写了Object类中的equals()方法,在Object类之中,默认的equals()方法实现比较的是两个对象的内存地址数值,但是并不符合与真正的对象比较需要 。对象比较之前也写过,但是之前那是自己定义的一个新的方法名称,今天可以给出标准的方法名称:equals() 。
class Person{ private String name; private int age; public Person(String name, int age){this.name = name;this.age = age; } public boolean equals(Object anObject){if(anObject == null){return false;}if(this == anObject){return true;}//判断anObject的实例是不是Personif( !(anObject instanceof Person)){return false;}//必须将Object类型变为Person类型后才可以调用name和age属性Person per = (Person) anObject;return this.name.equals(per.name) && this.age == per.age; } public String toString(){//覆写Object类方法return "name = " + this.name + ",age = " + this.age ; }}public class TestDemo3{ public static void main(String args[]){Person per1 = new Person("zsr",18);Person per2 = new Person("zsr",18);//trueSystem.out.println(per1.equals(per2));//falseSystem.out.println(per1.equals("Hello,world!")); }}
但是需要有一个注意,很多人在写对象的比较会使用如下的形式:
推荐阅读
- 腌肉晒之前要不要清洗
- 花边的常用材料有哪些
- 有关持之以恒的五件事例 古人持之以恒的故事及寓意
- 40岁是什么之年
- 蒸肉糕窍门
- 3d4d5d6d的区别
- 刘翠霞简介
- 详述狮身人面像的可怕之谜
- 云南省瑞丽市疫情防控 双重压力之下的瑞丽
- 洋芋怎么做好吃又简单
