Java基础之访问控制权限和jar命令4月打卡day16

举报
java厂长 发表于 2022/04/13 09:08:53 2022/04/13
【摘要】 Java基础之访问控制权限和jar命令4月打卡day16关于作者作者介绍🍓 博客主页:作者主页🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻。1、访问控制权限之前学习到的private就属于一种访问控制权限,而这种访问控制权...

Java基础之访问控制权限和jar命令4月打卡day16

关于作者

  • 作者介绍


🍓 博客主页:作者主页

🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。

🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻。

1、访问控制权限

之前学习到的private就属于一种访问控制权限,而这种访问控制权限只是封装的一部分,再java里面提供有四种访问控制权限:private、default、protected、public,而这四种访问控制权限定义如下:

范围 private default protected public
同一包中的同一类
同一包中不同类
不同包中的子类
不同包中的非子类

实际上public永远都可以访问,但是对于封装而言主要使用三个权限:private、default、protected。

观察protected访问权限

Info.java

package cn.sxau.demo.a;
public class Info {
//protected权限
    protected String str = "www.baidu.com";
​
}

SubInfo.java

package cn.sxau.demo.a;
import cn.sxau.demo.a.Info;
public class SubInfo extends Info{
    public void print(){
        System.out.println(super.str);
    }
}

TestInfo.java

package cn.sxau.testab;
import cn.sxau.demo.a.SubInfo;
public class TestInfo{
    public static void main(String args[]){
        new SubInfo().print();
    }
}

image-20210807211643215

可以发现SubInfo继承的子类Info不在同一个包内,但是在同一个子类中,并且可以调用其子类。

错误代码

package cn.sxau.testab;
import cn.sxau.demo.a.Info;
public class TestInfo{
    public static void main(String args[]){
        System.out.println(new Info().str);
    }
}
/*
F:\java\javabase\day09>javac -d . TestInfo.java
TestInfo.java:5: 错误: str 在 Info 中是 protected 访问控制
                System.out.println(new Info().str);
                                             ^
1 个错误
*/

原因是str是protected权限,所以在不同类非子类的类中是无法访问。

对于权限的选择

  • 对于封装的描述大部分情况下都使用的是private,很少的情况下使用protected,这两个都叫封装

  • 属性都是以private,方法都使用public。

封装性就是指private、protected、default三个权限的使用。

2、jar命令

Jar是一种java给出的压缩格式文件,即:可以将.class文件以.jar压缩包的方式给用户,这样方便程序的维护,如果要使用jar的话,可以直接利用JDK给出的jar命令完成。

image-20210807214226657

c:创建一个新的归档文件

f:指定jar的文件名称,由用户制定一个*.jar的文件名。

v:生成标准的压缩信息

Message.java

package cn.sxau.util;//打包
public class Message{
    public String print(){
        return "hello world";
    }
}
  1. 将Message.java程序进行编译:javac –d . Message.java,生成包.类;

  2. 将“包.类”压缩成my.jar文件:jar –cvf my.jar cn,出现了一个my.jar包;

此时my.jar就包含了所需要的程序使用类

现在my.jar和MyTest.java处于同一目录之中。但是发现找不到my.jar之中定义的内容,这是因为在java之中每一个*.jar文件都属于一个独立的CLASSPATH路径,如果要想使用,必须配置CLASSPATH。

在测试之前需要在cmd配置SET CLASSPATH=.;F:\java\javabase\day09\my.jar

//定义一个测试类 调用my.jar
package cn.sxau.test;
public class MyTest{
    public static void main(String args[]){
        cn.sxau.util.Message msg = new cn.sxau.util.Message();
        System.out.println(msg.print());
    }
}
/*
执行
F:\java\javabase\day09>java cn.sxau.test.MyTest
hello world
*/
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。