内部类详解

目录

内部类

方法内部类

静态内部类

匿名内部类

API

Object

面试题


内部类

        成员内部类: 类中方法外

        方法内部类: 方法中

        静态内部类: static修饰的成员内部类

        匿名内部类: 创建内部类,不起名,

成员内部类

        位置: 类中方法外

//定义外部类
class Outer{
    //成员内部类
    class Inner{}
}

注意:

1、成员内部类可以被所有权限修饰符修饰

2、成员内部类可以被final\abstract修饰

3、成员内部类中可以定义成员属性、成员方法、构造代码块 构造方法,但是注意不能包含静态相关的内容

4、成员内部类可以被外部类使用,例如作为属性的数据类型 在外部类的普通方法中创建内部类的对象

5、内部类可以调用外部类的属性和方法

6、如果需要在其他类中创建内部类的对象,格式如下:

外部类.内部类 变量名 = new 外部类().new 内部类();

例如:

Outer.Inner inner = new Outer().new Inner();

inner.innerMethod();

7、通常如果在其他类中不允许访问内部类,则可以将内部类通过private进行修饰

方法内部类

        位置: 方法中

        例如: 

public void Method(){

    class Inner{
        
    }
}

注意: 

       

注意:

1、方法内部类只能被默认权限修饰符修饰

2、方法内部类可以被final\abstract修饰

3、方法内部类中可以定义成员属性、成员方法、构造代码块 构造方法,但是注意不能包含静态相关的内容

4、方法内部类的使用必须在内部类定义之后,且只能方法内部使用

5、方法内部类可以使用当前方法的局部变量,可以调用其他方法

静态内部类

位置:

类中方法外

例如:

class Outer1{

    //定义静态内部类

    static class Inner{

       

    }

}

注意:

1、静态内部类可以被所有权限修饰符修饰

2、静态内部类可以被final\abstract修饰

3、静态内部类中可以定义成员属性、成员方法、构造代码块 构造方法,包含静态相关的内容

4、静态内部类可以被外部类使用,例如作为属性的数据类型 在外部类的普通方法中创建静态内部类的对象

5、静态内部类可以调用外部类的静态属性和静态方法

6、如果需要在其他类中创建静态内部类的对象,格式如下:

外部类.内部类 变量名 = new 外部类.内部类();

例如:

Outer1.Inner inner = new Outer1.Inner();

inner.innerMethod();

7、通常如果在其他类中不允许访问内部类,则可以将内部类通过private进行修饰

匿名内部类

创建内部类没有名字

格式一:

        new 抽象类类名(){

                抽象方法的实现

        }

创建抽象类的子类的对象

格式二:

        new 接口名(){

                接口中抽象方法的实现

        }

创建接口的实现类的对象

格式三:

        new 类名(){

                重写类中的方法

        }

创建类的子类的对象

改造类中的方法实现

注意:

        只能使用一次

场景:

        如果某个类只是为了传参而使用一次,建议使用匿名内部类

API

API:

        手册

        JDK1.6中文

        JDK8-官网 英文

        百度版

        谷歌版

使用:

        索引位置进行类名的搜索

        类的介绍页面:

                类所属包的介绍

                类定义的代码

                类的介绍

                属性的介绍

                构造方法

                普通方法

概念:

本质上就是目录 管理java文件

包的命名:

        单级包:

                包名小写

                cn

多级包

        每一级之间通过.分隔

        用所在公司的域名倒写形式

www.tedu.cn    cn.tedu

www.badiu.com   com.baidu

包的划分:

        角色划分

                user

cn.tedu.user

                product

                order

操作划分:

        增删改查

cn.tedu.add

cn.tedu.delete

        架构:

                cn.tedu.web

                cn.tedu.service

                cn.tedu.dao

注意:

1、类通常要放在指定的包中,但是也可以直接放在src目录,不属于任何一个包

2、package关键字  表示包

        格式:

package 包名;

        位置:

java文件的首行

        作用:

声明当前类所属的包

要求所在目录和声明的包名必须一致

3、在同一个包中 类不能重名

        在不同的包中,类可以同名

4、默认情况下,优先引用同包中的类;

        但是不能直接使用不同包的类;

5、import导包语句

        import关键字 来指定具体的包名

import 包名.类名;

位置:

packge下边 class上边

import 包名.*;--导入该包下所有的类,不包含该包的子孙包下的类。

6、java.lang包 默认已经被所有的类都导入了

7、程序中可以在使用类时加类所属的包名  这样可以无需导包

例如:

 java.util.Scanner sc = new java.util.Scanner(System.in);

常用的包:

         java.io                                      通过数据流、序列化和文件系统提供系统的输入和输出。

java.lang

提供对java编程语言的设计基础内容。

java.lang.reflect

反射

java.lang.annotation  

注解相关的包

java.math

用于执行任意精度的整数运算提供的类( BigInteger)和任意精度的小数运算( BigDecimal)。

java.net

为实现网络应用程序提供类。

java.util

包含集合框架、遗留的集合类、事件模型、日期和时间的设施、国际化和各种实用工具类(一个字符串标记,一个随机数发生器,和一位阵列)。

Object

所属包:java.lang

Class Object

类定义:public class Object{}

类介绍:

        Object类是类层次结构的根类(顶级父类)。

        每个类都以 Object作为超类(父类)。

        所有对象,包括数组,实现这个类的方法。

构造方法:

        无参构造

方法:

        1、protected Object clone()--创建并返回此对象的副本

        注意:

1、protected --受保护的 可以在本类 子类 同包类

在子类中且要通过当前子类对象才能调用protected修饰的方法

2、CloneNotSupportedException-执行clone方法抛出异常

要克隆对象对应的类必须实现Cloneable接口

3、Cloneable接口--标记接口 如果实现了该接口 则表示该类的对象时允许拷贝 如果没有实现接口 表示不允许clone方法拷贝的方法

接口中没有抽象方法

面试题

 

2、protected void finalize()

    当垃圾回收确定没有对对象的引用时,由对象上的垃圾回收器调用。

  程序控制垃圾回收器来指定回收某个对象?

垃圾回收器自己执行  程序员无法干预

finalize方法可以提醒垃圾回收器可以回收对象  无法让对象立马被回收掉

3、public final Class<?> getClass()

        返回当前对象的运行时类型

        Animal a = new Dog();

        a instanceof Dog-true

        a.getClass()--Dog

        Dog dog = (Dog)a;

应用场景:

1、将任意类的对象赋值给Object类型的引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小乔同学Online

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

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

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

打赏作者

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

抵扣说明:

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

余额充值