java面向对象编程-内部类、classpath、模块

一、内部类

1、Inner Class

class Outer{
    class Inner{
        
    }
}

内部类实例无法单独存在,必须依赖于外部类

  • Inner Class的作用在外部类的内部,可以访问private字段,并且可以修改private字段
  • java编译为.class文件,Outer类被编译成Outer.class, Inner 类被编译成 Outer$Inner.class

2、匿名类(Anonymous Class)

  • 继承接口
Runnable r = new  Runnable(){
	//Runnable是一个接口,接口是无法实例的,这里是定义一个匿名类
    //覆写方法
}
  • 继承普通类
HashMap<String, String> map1 = new HashMap<>();
        HashMap<String, String> map2 = new HashMap<>() {}; // 匿名类!
        HashMap<String, String> map3 = new HashMap<>() { //匿名类,同时定义了静态方法
            {
                put("A", "1");
                put("B", "2");
            }
        };
        System.out.println(map3.get("A"));
    }

3、静态内部类(static nested class)

  • 用在外部类中定义静态内部类,用static字段修饰

  • 静态内部类不在依附外部类,是一个独立的类,类比于静态字段,但是可以访问外部类的private方法和字段

    public static void main(String[] args){
        
        Outer.StaticNested sn = new Outer.StaticNested();
        sn.hello();
    }
    class Outer{
        static class StaticNested{
            void hello(){
                System.out.println("Say Hello!");
            }
        }
    }
    

二、classpath和jar

  • classpath是JVM用到的一个环境变量,用来搜索class文件
  • windows下环境变量用隔开,如果路径中有空格,用""包裹
  • linux系统下环境变量用隔开

1、设定classpath

  • 在环境变量中设置
  • 在编译jar包的时候设置,用-classpath或者-cp指定路径
  • 不要把任何Java核心库添加到classpath中!JVM根本不依赖classpath加载核心库!

2、jar包

​ jar包可以把package组织的目录层级,以及各个目录下的所有文件(包括.class文件和其他文件)都打成一个jar文件,实际上jar包就是个zip压缩包

制作jar包

​ 直接在资源管理器中,找到正确的目录,点击右键,在弹出的快捷菜单中选择“发送到”,“压缩(zipped)文件夹”,就制作了一个zip文件,然后将zip后缀改成jar后缀

3、MANIFEST.MF文件

jar包还可以包含一个特殊的/META-INF/MANIFEST.MF文件,MANIFEST.MF是纯文本,可以指定Main-Class和其它信息。JVM会自动读取这个MANIFEST.MF文件,如果存在Main-Class,我们就不必在命令行指定启动的类名

三、模块

1、编写模块

创建模块,这个过程与创建java项目是一样的, 创建完成之后,会比java项目在src目录下多了一个module-info.java这个模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gvnDfrip-1650989011683)(images/面向对象编程基础/image-20220426155242671.png)]

2、打包JRE

  • 打包成JRE文件用jlink
jlink --module-path hello.jmod --add-modules java.base,java.xml,hello.world --output jre/

--module-path指定模块位置,--add-modules指定依赖的模块,---output指定输出目录

  • 运行JRE

    在jre目录下,通过 jre/bin/java --module hello.jmod运行

3、访问权限

  • 在class类中,访问权限分为public, private, protected,包默认的访问权限

  • 在模块中,需要在依赖中即module-info.java文件中添加exports,使得别的模块能有访问的权限

module hello.world {
    exports com.itranswarp.sample;

    requires java.base;
	requires java.xml;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值