一、java内部类具体分四大类

        1、成员内部类

        2、静态内部类

        3、局部内部类

        4、匿名内部类

  1、成员内部类             :作为类的成员,存在于类中 

 //成员内部类可以调用外部类的所有成员,但只有在创建了外部类的对象后,才能调用外部的成员。
public class Outter1 {
static int a=1;
int b=0; public static void test1(){
System.out.println("外部类的静态方法");
} public void test2(){
System.out.println("外部类的非静态方法");
} //
class Inner{
public void test(){
System.out.println("在成员内部类的方法中");
//调用外部类的静态方法
test1(); //调用外部类的非静态方法
test2();
System.out.println(a+b);//访问外部类的静态成员变量和非静态成员变量
}
} public static void main(String[] args) {
//Inner in=new Inner();成员内部类的对象不能直接创建,会报错
Outter1 out=new Outter1();//先创建外部类的对象
Inner in=out.new Inner();//注意:!!成员内部类的对象必须通过外部类的对象创建
}
}

  2、静态内部类     :作为静态成员存在类中

//静态内部类虽然是外部类的成员,但是在未创建外部类的对象的情况下,可以直接创建静态内部类的对象。静态内部类可以引用外部类的静态成员变量和静态方法,但不能引用外部类的普通成员。

 //静态内部类的测试程序
public class Outter {
static int a=1;
int b=5; static void test(){
System.out.println("外部类的静态方法");
} static class Inner{
public void test2(){
System.out.println("a的值为"+a);;//直接引用外部类的静态成员变量
test();//直接引用外部类的静态方法
//b++; 静态内部类中不允许访问外部非static属性
System.out.println("静态内部类的方法");
}
} static class Inner2{
public static void test2(){
System.out.println("如果内部类中的方法为static方法,那么内部类也必须为静态的");
}
} public static void main(String[] args) {
Inner in=new Inner();//静态内部类的对象可以直接创建,无需先创建外部类的对象
in.test2();
}
}

3、局部内部类   :存在某个方法的内部,作用域,方法内

//局部内部类只能在方法内部中使用,一旦方法执行完毕,局部内部类就会从内存中删除。
//必须注意:如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的。 public class Outter2 {
int a=10;
public void test(){
final int c=5;   System.out.println("在外部类的方法中"); class Inner{
int b=20;
void test1(){
System.out.println("局部内部类的方法中"); System.out.println(c);//注意:如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的。
}
}
Inner inner=new Inner();
inner.test1();
} public static void main(String[] args) {
Outter2 outter=new Outter2();
outter.test();
}
}

4、匿名内部类 : 匿名内部类的定义与对象的创建合并在一起,匿名内部类一般通过如下形式定义,并且在定义的同时进行对象的实例化。

  

  //new 类或者接口的名字(){

  //匿名内部类的主体,大括号中是匿名内部类的主体,这个主体就是类或者接口的实现,如果是类,那么匿名内部类是该类的子类,如果是接口,匿名内部类需要完成接口的实现。

//}

class Person{
public void show(Message message){
message.show();
}
} class Message{
public void show(){
System.out.println("在Message类中");
}
} public class Outter3 {
public static void main(String[] args) {
Person person=new Person(); person.show(new Message(){  //这里创建了匿名内部类
public void show(){
System.out.println("在匿名内部类中");
}
});
}
}

java内部类基础知识的更多相关文章

  1. JAVA相关基础知识

    JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...

  2. Java 多线程——基础知识

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  3. java必备基础知识(一)

    学习的一点建议: 每一门语言的学习都要从基础知识开始,学习是一个过程,"万丈高楼平地起",没有一个好的地基,想必再豪华的高楼大厦终究有一天会倒塌.因此,我们学习知识也要打牢根基,厚 ...

  4. 什么才是java的基础知识?

    近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...

  5. java部分基础知识整理----百度脑图版

    近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...

  6. Java :内部类基础详解

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 第一次见面 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类. public class OuterClass { pr ...

  7. JAVA学习基础知识总结(原创)

    (未经博主允许,禁止转载!) 一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...

  8. JAVA多线程基础知识(一)

    一. 基础知识 要了解多线程首先要知道一些必要的概念,如进程,线程等等.开发多线程的程序有利于充分的利用系统资源(CPU资源),使你的程序执行的更快,响应更及时. 1. 进程,一般是指程序或者任务的执 ...

  9. Java SE 基础知识(一)

    一.基础知识 1. Java SE : Java Standard Edition Java ME : Java Micro Edition Java EE : Java Enterprise Edi ...

随机推荐

  1. Ubuntu的软件安装管理---dpkg与apt-*详解

    摘要:软件厂商先在他们的系统上面编译好了我们用户所需要的软件,然后将这个编译好并可执行的软件直接发布给用户安装.不同的 Linux 发行版使用不同的打包系统,一般而言,大多数发行版分别属于两大包管理技 ...

  2. share团队冲刺4

    团队冲刺第四天 昨天:进行各种按钮的操作,自定义按钮颜色形状 今天:设置布局,账号密码的输入,选择框 问题:无

  3. 记一次Java面试问题点总结

    引言 昨日接了一个阿里外包的电话面试,问了一些技术问题感觉到自己是真的菜,接触Java开发已经也有一段时间,技术方面说来惭愧,一直以来只是局限于框架工具的用法,也没有进行了解其实现的原理,更重要的是一 ...

  4. Mac中制作USB系统启动盘

    .iso镜像文件转 .dmg文件 hdiutil convert -format UDRW -o linuxmint.dmg ~/Desktop/linuxmint-19-cinnamon-64bit ...

  5. 运行SQL文件报错Invalid ON UPDATE clause for 'create_date' column

    Invalid ON UPDATE clause for 'create_date' column   原因: 高版本的mysql导数据到低版本出现的问题 日期类型报错 MySQL 5.5 每个表只允 ...

  6. Python笔记_第一篇_面向过程_第一部分_7.文件的操作(.txt)

    在平时,我们不光要对程序内的代码进行输入和输出的操作,还要对程序外的文件进行和语言之间的交换.操作和运算.在基础部分,先讲解对于外部的.txt文件的操作. 第一部分 基本内容讲解 1.   什么是文件 ...

  7. 数字转中文大写=> 1234=> 一千二百三十四

    # -*- coding: utf-8 -*- # 最大值:九兆九千九百九十九亿九千九百九十九万九千九百九十九 import re p = ['', '十', '百', '千', '万', '十', ...

  8. 主流CAD菜单开发

    AutoCAD Inventor Solidedge Proe UGNX

  9. [原]C++新标准之std::thread

    原 总结 C++11 thread  概览 std::thread 类定义 各个成员函数的简单介绍 例子 更多 参考资料 概览 从C++11开始提供了线程的支持,终于可以方便的编写跨平台的线程代码了. ...

  10. Git与IDEA集成

    软件配置: 系统版本:Windows10 JDK版本:1.8 Git版本:2.19.1 IDEA版本:2016.3 Maven版本:3.5.4 Git安装: Git下载地址:https://git-s ...