• java学习之内部类、包与代码块


    一  内部类

    将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。其他类也称为外部类。

    1 成员内部类

    成员内部类,定义在外部类中的成员位置。与类中的成员变量相似,可通过外部类对象进行访问

    定义的格式:

    class 外部类 {

        修饰符 class 内部类 {

            //其他代码

      }

    }

    访问方式:外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

    2 局部内部类

    局部内部类,定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问

      定义格式:

    class 外部类 {

        修饰符 返回值类型 方法名(参数) {

    class 内部类 {

    //其他代码

        }

      }

    }

      访问方式:在外部类方法中,创建内部类对象,进行访问。

    3 匿名内部类

    最常用到的内部类就是匿名内部类,它是局部内部类的一种。

    定义的匿名内部类有两个含义:

    1  临时定义某一指定类型的子类

    2  定义后即刻创建刚刚定义的这个子类的对象

    下面是例子来帮助理解:

    package com.oracle.Demo01;
    
    public interface Smoking {
        public abstract void smoke();
    }
    public class Test {
        public static void main(String[] args) {
            //匿名内部类对象
            //new 接口或者抽象类{
            //重写父类的抽象方法
            //}
            new Smoking(){
                public void smoke(){
                    System.out.println("抽烟");
                }
            }.smoke();
        }
    }

    当接口中有多个构造方法的时候,必须重写所有的接口方法,否则会报错。

    二 包的声明与访问

    1 包的概念

    java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件。

    当类文件很多的时候,通常我们会采用多个包进行存放管理他们,这种方式称为分包管理。

    在项目中,我们将相同功能的类放到一个包中,方便管理。并且日常项目的分工也是以包作为边界。

    类中声明的包必须与实际class文件所在的文件夹情况相一致,即类声明在a包下,则生成的.class文件必须在a文件夹下,否则,程序运行时会找不到类。

    2 包的声明格式

    通常使用公司网址反写,可以有多层包,包名采用全部小写字母,多层包之间用”.”连接

    如:Oracle网址oracle.com那么网址反写就为com.oracle

    注意:声明包的语句,必须写在程序有效代码的第一行(注释不算)

    3 包的访问

    在访问类时,为了能够找到该类,必须使用含有包名的类全名(包名.类名)。

    如: java.util.Scanner

         java.util.Random

        com.oracle.Demo

    4 导包

    我们每次使用类时,都需要写很长的包名。很麻烦,我们可以通过import导包的方式来简化。

    导包的格式:

    import 包名.类名;

    三 访问修饰符

     

    在Java中提供了四种访问权限,使用不同的访问权限时,被修饰的内容会有不同的访问权限,以下表来说明不同权限的访问能力:

    public

    protected

    Default(默认)

    private

    同一类中

    同一包中(子类与无关类)

    不同包的子类

    不同包中的无关类

     

    这是两个不同包下的四个类

    这是A类

    这是B类

    这是C类

    这是D类

    五 代码块

    1局部代码块

    class Demo{
        public static void main(String[] args)    {
            {
                      int x = 1;
                     System.out.println("普通代码块" + x);
            }
            int x = 99;
            System.out.println("代码块之外" + x);
        }
    }

    结果:

    普通代码块1

    代码块之外99

    2 构造代码块

    构造代码块是定义在类中成员位置的代码块

    l  优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作

    l  每创建一个对象均会执行一次构造代码块。

    package com.oracle.Demo04;
    
    public class Person {
        public Person(){
            System.out.println("这是构造方法");
        }
        {
            System.out.println("这是构造代码块");
        }
    }
    package com.oracle.Demo04;
    
    public class Test {
        public static void main(String[] args) {
            Person p=new Person();
        }
    }

    运行结果为:

    当再创建一个对象p2时

    运行结果为:

    3 静态代码块

    静态代码块是定义在成员位置,使用static修饰的代码块。

    l  它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

    l  该类不管创建多少对象,静态代码块只执行一次。

    package com.oracle.Demo04;
    
    public class Person {
        public Person(){
            System.out.println("这是构造方法");
        }
        {
            System.out.println("这是构造代码块");
        }
        static{
            System.out.println("这是静态代码块");
        }
    }

    当创建两个对象时

    运行结果为:

  • 相关阅读:
    centos7 安装prometheus node_exporter
    RMAN备份演练初级篇
    RMAN命令
    oracle数据库的归档模式
    oracle的会话(session)
    oracle的例程
    oracle热备份
    Oracle数据库归档模式的切换及其相关操作详解
    Oracle角色
    类名.class, class.forName(), getClass()区别
  • 原文地址:https://www.cnblogs.com/zzq123/p/10063274.html
Copyright © 2020-2023  润新知