包装类和内部类--简单讲解

包装类

这里写图片描述

包装类的转换

这里写图片描述

包装类的层次结构

  • 除了Boolean和Character外,其他的包装类都有valueOf()和parseXXX()方法,并且还具有 byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue()方法,这些方法时最常见的方法。
    这里写图片描述

包装类的转换

    int转换为Integer
    int i=10;
    Integer I=new Integer(i);
    //这样更好,会利用缓存
    Integer  I = Integer.valueOf(i); 
    Integer转换为int
    Integer i=new Integer(10);
    int i=I.intValue();

    String转换为Integer
    String s="12";
    Integer I=new Integer(s);
    Integer I = Integer.valueOf(s); //更好
    Integer转换为String
    Integer I=new Integer(23);
    String s=I.toString();

    String转换为int
    String s="20";
    int i=Integer.parseInt(s);
    int转换为String
    int i=20;
    String s1=String.valueOf(i);
    String s2=""+i;

自动装箱和自动拆箱

  • java5.0开始支持自动装箱和自动拆箱,包装类的变量可以被赋值为一个基本类型—装箱;基本类型的变量可以被赋值为一个包装类

    //自动装箱
    Integer itg = 123;
    //自动拆箱
    Int i = Integer.valueOf(111);
    
  • 注意:

    • 程序中少量的自动拆箱和装箱可以,但是大量的拆箱和装箱会对效率影响较大,所以尽量需要什么类型就声明什么类型。
      Integer类的自动转换

       /**
        *实际上,程序运行时,系统为我们执行了下面一条语句
        * Integer number = new Integer(290);
        */
          Integer number = 290;
          System.out.println(number); 
      
      /*
       * 实际上,程序运行时,系统为我们执行了下面语句
       * int number2 = number.intValue();
       */
      Integer number = 290;
      int number2 = number;
      System.out.println(number2);
      

内部类

  • 在类的内部定义一个类
  • 内部类是一种编译时语法
  • 内部类分为四种
    • 成员内部类
    • 静态内部类
    • 局部内部类
    • 匿名内部类

成员内部类

  • 内部类的作用
    • 内部类可以访问外部类的私有成员
  • 类似于成员变量,可以使用访问修饰符
  • 构造一个成员内部类对象必须先够近啊一个外部类对象,然后通过外部类对象的引用“.new”构造内部类对象。

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

  • 在内部类中访问外部类的成员变量,并不会破坏封装

    Outer.this.index
    
  • 成员内部类中不能有静态的变量

成员内部类代码
class Outer {
    private int index;
    public Outer(int index) {
      this.index = index;
    }
    class Inner {
      private int index = 100;
      public void print() {
          System.out.println(this.index);
          System.out.println(Outer.this.index);
      }
    }
}
// 测试的main方法
public static void main(String args[]) {
        Outer out1 = new Outer(200);
        Outer.Inner in = out1.new Inner();
        in.print();
}

内部类的作用

  • 配合接口,抽象类实现多继承,这是使用内部类的主要原因

     public abstract class Person {
       public abstract void run();
    }
    
    public interface Machine {
       void run();
    }
    
    public class Robot extends Person {
       class RobotHeart implements Machine {
          public void run() {
            System.out.println("机器人发动机开动");
          }
       }
       public void run() {
         System.out.println("人在跑");
       }
    }
    

静态内部类

  • 用static修饰的内部类称为静态内部类
  • 在静态内部类中可以有静态的成员
  • 静态内部类只能访问外部类的静态成员,但是不能访问外部类的非静态成员
  • 构造静态内部类对象时不需要外部类对象

     Outer.Inner in = new Outer,Inner();
    
静态内部类代码
class Outer {
    private int index;
    private static int a = 200;
    static class Inner {
        private static int b = 300;
        public  void print() {
            System.out.println(a + " " + b);
        }
    }
}
// 测试的main方法
public static void main(String args[]){
   Outer.Inner in = new Outer.Inner();
   in.print();
}

局部内部类

  • 定义在外部类方法中的内部类称为局部内部类,不能使用访问修饰符,但是可以使用abstract和final修饰符
  • 局部内部类的范围是在该方法内部
  • 可以访问外部类的属性,还可以访问外部类的有效的局部变量,但是要求这个局部变量必须是final的
  • 内部类的作用
    • 接口公开,却把接口的实现类作为内部类隐藏起来,强制用户通过接口来访问接口的实现类,强制达到弱耦合性
局部内部类代码

这里写图片描述

匿名内部类

  • 一个匿名内部类是一个特殊局部内部类
  • 这个内部类一定是用来继承一个类或者实现一个接口的,而且我们只会创建这个内部类的一个对象
  • 可以出现在方法的返回值类型中,也可以出现在方法的参数中
  • 不能定义构造方法
匿名内部类代码(一)

这里写图片描述

匿名内部类代码(二)

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

苦修的木鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值