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!")); }}
      但是需要有一个注意,很多人在写对象的比较会使用如下的形式:

      推荐阅读