Java-内部类简单使用

Posted 淡然微笑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-内部类简单使用相关的知识,希望对你有一定的参考价值。

 

一、实例内部类(成员内部类)

  1.成员内部类可以等同看做成员变量

  2.成员内部类不能有静态声明

  3.成员内部类可以访问外部类所有的数据

public class OuterClass {

    //静态变量
    private static String s1 = "Array";

    //成员变量
    private String s2 = "keke";

    //静态方法
    private static void m1(){
       System.out.println("我是静态方法!");
    }

    //成员方法
    private void m2(){
        System.out.println("我是成员方法!");
    }
    //成员内部类, 可以访问控制权限的修饰符修饰
   //private,public,protected,缺省
    class InnerClass {
        //不能定义静态方法
        //public static void m3(){

        //}
        public void m4(){
            //静态的
            System.out.println(s1);
            m1();
            //成员的
            System.out.println(s2);
            m2();
        }


    }
    public static void main(String[] args){
        //创建外部类对象
        OuterClass outerClass = new OuterClass();
        InnerClass innerClass = outerClass.new InnerClass();
        innerClass.m4();
    }
}

二、静态内部类:

 1.静态内部类可以等同看做静态变量

 2.内部类的重要的作用:可以访问外部类中的私有的属性

 3.静态内部类可以直接访问外部类的静态数据,无法直接访问成员变量

public class OuterClass {

    //静态的成员变量
    private static String s1 = "Array";

    //成员变量
    private String s2 = "keke";

    //静态方法
    private static void m1(){
       System.out.println("我是静态方法!");
    }

    //成员方法
    private void m2(){
        System.out.println("我是成员方法!");
    }
    //成员内部类, 可以访问控制权限的修饰符修饰
   //private,public,protected,缺省
   static class InnerClass {
        //不能定义静态方法
        public static void m3(){
            //静态的
            System.out.println(s1);
            m1();
            //无法直接访问成员
            //System.out.println(s2);

        }
        public void m4(){
            //静态的
            System.out.println(s1);
            m1();
        }
    }
    public static void main(String[] args){
        //创建外部类对象
        OuterClass.InnerClass.m3();

        //执行m4方法
        InnerClass innerClass = new OuterClass.InnerClass();
        innerClass.m4();

    }
}

三、匿名内部类 指类没有名字

public class OuterClass {

    public static void array(UserService u){
        u.logout();
    }

    public static void main(String[] args){
        //调用array方法
        //匿名内部类 new UserServiceIml()
        array(new UserServiceIml());
    }
}
interface UserService{
    //退出系统
    void logout();
}
class UserServiceIml implements UserService{

    public void logout() {
        System.out.println("系统退出了");
    }
}

四、异常使用

/*

getMessage 和 printStackTrace

1.取得异常描述信息:getMessage();

2.取得异常的堆栈信息,(比较适合程序调试阶段)printStackTrace();

* */

import java.io.*;
public class ExceptionTest {

    public static void main(String[] args){
        try {
           FileInputStream fileInputStream = new FileInputStream("c:11.text");
        }catch (FileNotFoundException e){
            e.printStackTrace();
            /*
            //堆栈信息
            java.io.FileNotFoundException: c:11.text (No such file or directory)
            at java.io.FileInputStream.open0(Native Method)
            at java.io.FileInputStream.open(FileInputStream.java:195)
            at java.io.FileInputStream.<init>(FileInputStream.java:138)
            at java.io.FileInputStream.<init>(FileInputStream.java:93)
            at ExceptionTest.main(ExceptionTest.java:12)
             */
            String msg = e.getMessage();//异常描述信息
            System.out.println(msg);//c:11.text (No such file or directory)
        }
    }
}

/*

Finally语句块:

 1.finally语句块可以直按和try语句块联用try... finally...

 2. try... catch.. finally也可以

 3.在 Finally中的代码是一定会执行的

 

 finally 句块一定会执行,所以通常在程序中为了保证某资源一定会释放

 所以一般在fina11y语句块中释放资源

 1.受控异常:就是編译异常

 2非受控异常:就是运行时异常

* */

以上是关于Java-内部类简单使用的主要内容,如果未能解决你的问题,请参考以下文章

JAVA基础——内部类详解

错误:这个片段内部类应该是静态的 [ValidFragment]

# Java 常用代码片段

# Java 常用代码片段

Java-内部类简单使用

Java 内部类