自学笔记之9号

发布于:2021-10-24 09:31:30

包装类
由于 Object 类是所有对象的父类,因此 Object 类型的引用能够接受 Java 中所有类型的对象。但是,对于基本类型,Object 类就无能为力了,毕竟 Object 只能处理对象类型。 包装类是为了把基本类型包装成对象类型, 从而能被 Object 类型统一管理。 我们定义了一个对象类型 MyInteger, 这个类型封装了一个 int 类 型的 value,从而把一个简单类型 int 类型封装成了一个对象类型。用这个 MyInteger 类的对象,同样可以表示一个整数。

简单类型和其对应的包装类类型如下表:

有了包装类之后,就要研究一下包装类和基本类型之间应该如何转换。除此 之外,还有其他类型的转换:字符串和基本类型以及包装类之间的转换。由于在 互联网上传输时, 大部分情况下不会进行数值的传递,很多情况下传递的是字符 串。

六种转换:

Int 转换为 Integer: (利用 Integer 的构造函数,以 int 作为参数创建相应的 Integer 对象) 代码: Int i1 = 10; Integer ii1 = new Integer( i1 ); Integer 转换为 int : (直接调用 Iteger 对象的 intValue 方法) 代码: Int i2 = ii1.intValue();

String 类型转换为包装类: (构造方法) 代码: String str = = “ 123 ” ; new Integer ( str ) ;

Integer ii2

对象转换为 String: (toString() 方法) 代码: String str2 = ii2.toStirng() ;

Int 转换为 String 类型: 代码: 方法一:int i = 10; String str3 = String.valueOf( i ) ;

方法二:String str4 = “” + i ; 字符串转换为基本类型: 例如:字符串转换为 Int: 代码:int i = Integer.parseInt ( “ 123 ” ) ;

JDK5.0 新特性:自动封装拆箱: 掌握三种类型,六种转换之后学*自动封装和拆箱。 在 JDK5.0 中,由系统自动完成基本类型和包装类之间的转换。 如: //把 int 类型直接赋值给 Integer 类型 Integer myInteger = 10 ; //把 Integer 类型直接赋值给 int 类型 Int i = myInteger ; 可以把 int 类型的变量直接赋值给 Integer 类型, 也可以把 Integer 类型的变 量直接赋值给 int 类型。也就是说,可以对 Integer 类型和 int 类型自动进行转 换。 需要注意的是, 这个新特性只是语法方面的改变, 而底层实现的原理, 并 没有发生改变。 Integer myInteger = null; int i = myInteger; 代码在运行时, 会产生一个 NullPointerException 的异常。

内部类
内部类分为四种:成员内部类、静态内部类、局部内部类、匿名内部类。

成员内部类:定义在成员变量的位置的类。 1、类里面,函数外面; 2、可以访问外部类的私有成员; 3、可以用 private 修饰,这样只能外部类的内部使用内部类; 4、编译后, 会产生 MyOuterClass.class 和 MyOuterClass$InnerClass.class 文件。 这说明, 在编译时, 内部类也会生成独立的.class 文件,换句 话说,内部类也是独立的类。
class MyOuterClass{ private int value; private class InnerClass{ public void m(){ System.out.println(value); } } }

创建对象分为两种情况: 1、在外部类里直接创建对象; 2、在外部类外面创建对象: MyOuterClass moc = new MyOuterClass(); inner = moc.new InnerClass();

MyOuterClass . InnerClass

最后要说明的一点, 由于成员内部类必须与外部类某一个对象 相关联, 因此成员内部类中不能定义静态方法。

静态内部类
静态内部类与成员内部类相似, 只有一点不同: 在定义成员内 部类之前, 增加一个 static 关键字,则定义的内部类就成为一个静 态内部类。static 关键字不能够用来修饰类,但是能够用来修饰内部 类。

成员内部类中能够访问外部类的静态成员以及非静态成员, 但是 不能定义静态方法。 静态内部类中只能访问外部类的静态成员,也可以定义静态方 法。 创建静态内部类的对象,也分两种情况 一、在外部类中,可以直接创建内部类的对象。 二、 MyOuterClass.InnerClass2 in2 = new MyOuterClass.InnerClass2();

局部内部类
所谓局部内部类, 指的是定义在方法内部的类。定义的这个 Inner 类只能在 m 方法内部使用。局部内部类能够访问外部类的私 有属性、静态属性。记住下面的规则: 在局部内部类中能够访问外 部类的局部变量, 但是要求该变量必须是 final 的! 作用:能够实现“强制弱耦合” ,即强制程序员必须要利用接 口来写程序,从而实现弱耦合。

匿名内部类
匿名内部类是一种特殊的局部内部类。 如果一个局部内部类满足 这样两个特点: 1、该内部类继承自某个类或者实现某个接口; 2、该内部类在整个方法中只创建了一个对象。 (例子) new 接口名 () { 实现接口的代码 } ;(先用{}实现了接口,
在 new 出一个对象)

匿名内部类是特殊的局部内部类,因此也具有局部内部类的特 点。例如:匿名内部类不仅可以访问外部类的私有成员, 还可以访

问外部类的局部变量, 但是要求这个局部变量被声明为“final” 。 由于匿名内部类没有明确的给出类的名字,因此,无法在匿名内部 类中定义任何构造方法。

例子
匿名内部类: public static Teacher getTeacher(int n){ //Jim 依然采用局部内部类的写法 class Jim implements Teacher{ public void teach(){ System.out.println(“Jim teach”);

} } //匿名内部类 if (n == 10) return new Teacher(){ public void teach(){ System.out.println(“Tom teach”); } }; else return new Jim(); }


相关推荐

最新更新

猜你喜欢