[零基础学JAVA]Java SE面向对象部分-21.包及访问权限

简介:
上季内容回顾:
异常的捕获与处理
本季主要知识点:
包与访问权限
image
包的产生原因:在开发中所有的程序肯定要提交到服务器上去。 
  张三:--> A.class --> 服务器 
  李四:--> A.class -------| 
根本原因在于一个文件夹下不能有重名的文件,包其实就是一个文件夹,每个文件夹下可以有相同类文件。
包的使用
image
在程序中使用package进行包的定义。 
文件夹需要用户自己手工建立吗? 
  肯定不需要,因为如果用户自己建立,则以后很麻烦 
最好可以根据package定义的格式自动生成包(文件夹)
image
image
image   
javac -d . Demo01.java  
· -d:表示生成文件夹,文件夹的名字就是以package中定义的名字为准。  
· .:表示在当前所在的文件夹下生成此包.类
如何去访问包中的程序呢?  
之前的运行: java 类名称 
打包后的运行: java 包.类名称
image 
例如:现在定义两类(包.类名称) 
  ·  org.redking.demo01.Demo --> 有一个打印“Hello World”的方法 
  ·  org.redking.demo02.Demo02 --> 访问org.redking.demo01.Demo类中的方法,打印输出
Demo.java
image
Demo02.java
image
image
编译之后发生了以下错误:
Demo02.java:3: org.redking.demo01.Demo 在 org.redking.demo01 中不是公共的;无法从外部软件包中对其进行访问 
import org.redking.demo01.Demo; 
                          ^ 
Demo02.java:6: 找不到符号 
符号: 类 Demo 
位置: 类 org.redking.demo02.Demo02 
                new Demo().print(); 
                    ^ 
2 错误
如果一个类想要被外包所访问,则此类一定要声明成public class,即:文件名称要与类名称一致。
image
我们再重新编译下哈~成功编译及执行哈~
image
如果想一次编译多个文件可以使用 javac -d . *.java
image 
问题: 
  你现在导入的只有一个类,是按以下格式写的: 
   import org.redking.demo01.Demo ; 
  那么如果我现在要导入多个类的时候,这样导入会不会太多了呢?
如果假设现在需要导入一个包的很多类,则可以使用“*”来表示。 
  import  包.*   --> 导入 
  如果现在使用的是导入“*” ,性能上会不会有问题? 
   使用导入“*”和分别导入各个类本质上没有任何的区别。因为java程序会自动找到所需要的类进行加载,不用的类,是不会加载的。
再看: 
  假如说现在有一个Demo03 的类,里面需要导入org.redking.demoa1.A 类,也需要导入org.redking.demoa2.A类时会怎么样?
A.java
image
image
A.java
image
image
生成了两个包里面都有A.class
image
Demo03.java
image
现在Demo03中导入了两个包中的A类,程序会怎样执行呢?编译出错了哈~
image
当一个类中导入了两个同名但不同包的类的时候,在访问时最好加入完整的包.类名称。
image
image
注意点: 
  在程序中始终不会有没有包的类,即:只要是类绝对要放在包里。 
那么如果所有的类都放在包里了,那么现在如果需要把一套类交给其他客户的时候肯定是不能把所有*.class文件散着给出去,往往会把这些的*.class文件压缩成一个包——jar包,把jar包给用户。 
如果要把一个类打成*.jar包,则可以借助于jar命令。
Person.java
image
image
image 
jar打包
image
出现my.jar文件哈~~~
image
我们可以使用winrar软件打开my.jar文件
image
现在有了my.jar,我们把org.redking.test包的文件夹删掉哈~
现在my.jar怎么使用呢?我们再写一个 DemoPerson.java
image
现在我们编译DemoPerson.java
image 
提示找不到Person类哈,但是Person类已经在my.jar包了哈~
image   
如果是一个jar包,则必须指定classpath。 
set classpath=E:\java\oo9\my.jar
image 
需要指定两个classpath 
set classpath=.;E:\java\oo9\my.jar
image
这就是jar包的使用哈~~~
如果觉得程序需要的很多*.jar包非常麻烦,则可以直接在我的电脑 --> 高级 --> classpath进行设置。
image
常见的包
image
image
image
提供了大量的类库,类库中是按照包的形式存放的。 
JDK 1.5版本,所以此包会自动导入,JDK 1.0的时候需要手工导入。 
GUI设计包:java.awt、javax.swing --> JAVA 2 
Applet程序是在网页上运行的小程序,是JAVA的最古老原形,但是现在基本上也已经不再使用了。 
Applet --> 垃圾 --> 程序是一个发展过程。EJB--> 垃圾 --> 理论很有价值
image
现在我们编译此Applet程序
image
需要编写html代码才可以运行applet程序
image
image
image
image
访问控制
image
Person01.java
image
Demo04.java
image
在同一包下可以进行访问
image
image
image
这时我们可以编写一个Stu子类
image
image
匿名内部类:Spring中使用的非常多 
  |- 但它是在抽象类和接口的基础上发展的。
image
image
以上代码中已经明确的定义出了子类 —— X类
image
这就叫匿名内部类哈~~~
image
本季重点
image
##############################################################
ps:下季进行JAVA SE应用哈~~~
##############################################################







本文转自redking51CTO博客,原文链接:http://blog.51cto.com/redking/130796 ,如需转载请自行联系原作者
相关文章
|
29天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
25 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
2月前
|
Java Android开发
Eclipse 创建 Java 包
Eclipse 创建 Java 包
33 1
|
2月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
60 3
|
2月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
45 2
|
2月前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
83 2
|
3月前
|
Java
Java访问外网图片地址时,如何添加代理?
【10月更文挑战第14天】Java访问外网图片地址时,如何添加代理?
59 2
|
8天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
10天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
10天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。