Java基础之访问控制权限和jar命令4月打卡day16
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();
}
}
可以发现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命令完成。
c:创建一个新的归档文件
f:指定jar的文件名称,由用户制定一个*.jar的文件名。
v:生成标准的压缩信息
Message.java
package cn.sxau.util;//打包
public class Message{
public String print(){
return "hello world";
}
}
-
将Message.java程序进行编译:javac –d . Message.java,生成包.类;
-
将“包.类”压缩成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
*/
- 点赞
- 收藏
- 关注作者
评论(0)