• 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非受控异常:就是运行时异常

    * */

  • 相关阅读:
    系统的访问
    tomcat 和 数据库的连接
    实体类编写规则
    webmagic 爬虫
    docker安装官方Redis镜像并启用密码认证
    解决Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. 问题
    Springboot配置druid报错Failed to bind properties under 'spring.datasource' to javax.sql.DataSource
    阿里云centos7.6搭建SVN远程仓库和Git远程仓库
    java 三大特性封装继承多态
    使用easyui tab需要注意的问题
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/Java_EternalClass.html
Copyright © 2020-2023  润新知