本文已参与「新人创造礼」活动,一同开启创造之路。
本篇博客首要给咱们介绍以下内容:
大一狗学不过来了,咱们多多支撑呀~
1.封装的概念
面临对象程序有三大特性:封装、承继、多态。而类和对象阶段,首要研究的便是封装特性。何为封装呢?简略来说便是套一个壳来荫蔽细节。
比方:电脑这样一个担任的设备,供给给用户的就仅仅一些很简单上手的功能:开关机、经过键盘输入,显示器,USB插孔等,让用户来和计算机进行交互,以此来完成日常事务。
但一个计算机,真实工作的是黑匣子里面的CPU、显卡、内存等一些硬件元件。
关于计算机运用者而言,不用去关怀内部的中心不见,比方主板上的线路是怎样布局的?CPU是怎样规划的?
用户只需求知道,怎样开机、怎样经过键盘和鼠标与计算机进行交互即可。
因而计算机厂商在出厂的时分,在外部套上壳子,将内部的完成细节躲藏起来,仅仅对外供给开关机、鼠标以及键盘插孔等,让用户能够与计算机进行交互即可,这样能让用户操作更舒适,也更进一步得保护电脑主机。关于咱们写的程序来说也是这样
那么就能够引出Java中封装的概念
封装:将数据和操作数据的方法进行有机结合,躲藏对象的特点和完成细节,进对外揭露接口来和对象进行交互
2.拜访限制符
Java中首要经过类和拜访权限来完成封装:类能够将数据以及封装数据的方法结合在一同,更符合人类对事物的认知,而拜访权限用来操控方法或许字段能否直接在类外运用。
Java中供给了四种拜访限制符:
No | 范围 | private | defaul | protected | public |
---|---|---|---|---|---|
1 | 同一包中的同一类 | ||||
2 | 同一包中的不同类 | ||||
3 | 不同包中的子类 | ||||
4 | 不同包的非子类 |
比方:
public:能够理解为一个人的表面特征,谁都能够看到
default:关于自己家族中(同一个包中)不是什么隐秘,关于其他人来说便是隐私了
private:只需自己知道,其他人都不知道
【阐明】:
- protected首要是用在承继中,这一部分后边我会给咱们介绍
- defaul权限便是指默许权限
- 拜访权限除了能够限制类中成员的可见性,也能够操控类的可见性
这是一个计算机的类
public class Computer {
private String cpu;
// CPU
private String memory;
// 内存
public String screen;
// 屏幕
String brand;
// 品牌-----》default特点
public Computer(String brand,String cpu,String memory,String screen){
this.brand = brand;
this.cpu = cpu;
this.memory = memory;
this.screen = screen;
}
public void Boot(){
System.out.println("开机~~~~");
}
public void PowerOff(){
System.out.println("关机~~~~");
}
public void SurfInternet(){
System.out.println("网上冲浪!!");
}
}
class TestComputer{
public static void main(String[] args){
Computer p = new Computer("HW","i7","8G","13*14");
System.out.println(p.brand);
// default特点:只能被本报中类拜访
System.out.println(p.screen);
// public特点:能够任何其他类拜访
//System.out.println(p.cpu);
// private特点:只能在Computer类中拜访,不能被其他类拜访
}
}
3.封装扩展之包
3.1包的概念
在面向对象系统中,提出了一个软件包的概念,即:**为了更好的办理,把多个类搜集在一同为一组,称为软件包。**有点类似于文件目录。
在Java中也引入了包的概念,包是对类、接口等的封装机制的体现,是一种对类或许接口等的很好的组织方式,比方:一个包中的类不想被其他包中的类运用。包还有一个重要的作用:在同一个工程中答应存在相同称号的类,只需处在不同的包中即可。(听不懂没关系,下面我会举例一一分析的~)
3.2导入包中的类
Java中现已供给了很多现成的类供咱们运用.例如Date类:能够运用java.util.Date导入java.util这个包中的Date类.
public class Test{
public static void main(String[] args){
java.util.Date date = new java.util.Date();
System.out.println(date.getTime());
}
}
可是这种写法比较麻烦一些,能够运用import句子导入包
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date =new Date();
//得到一个毫秒等级的时刻戳
System.out.println(date.getTime());
}
}
假如需求运用java.util中的其他类,能够运用import java.util.*(哈哈管它呢,全导进去!)
import java.util.*;
public class Test {
public static void main(String[] args) {
Date date =new Date();
//得到一个毫秒等级的时刻戳
System.out.println(date.getTime());
}
}
可是咱们更主张显式的指定要导入的类名,否则还是简单出现抵触的状况
咱们要完善好导入的途径
咱们也能够运用import static导入包中静态的方法和字段。
import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
double x = 30;
double y = 40;
//静态导入的方式写起来更便利
//double result = Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
double result = sqrt(pow(x,2)+pow(y,2));
System.out.println(result);
}
⚠️注意事项:import和C++的#include不同很大.C++必须用#include来引入其他文件内容,可是Java不需求,import仅仅为了写代码的时分更便利。import更类似于C++的namespace 和using(这儿就不多说了,我也不太懂,哈哈哈)
3.3自定义包
基本规矩
- 在文件的最上方加上一个package句子指定该代码在哪个包中
- 包名需求尽量指定成唯一的姓名,一般会用公司的域名的倒置形式(例如com.bit.demo1).
- 包名要和代码途径相匹配。例如创立com.bit.demo1的包,那么会存在一个对应的途径com/bit/demo1来存储代码
- 假如一个类没有package句子,则该类被放到一个默许包中。
操作步骤
首先创立包
咱们这样输入之后,出来的是一个只需一行的包
不用着急, 咱们把compact middle packages撤销勾选
这样层次感就出来啦
中心的bit包中依旧能够导包!
咱们这儿调查一个小细节:
package 为声明包的途径
此时咱们在TestDemo2下调用demo1包中的TestDemo类:
咱们能够看到,这儿编译器编译器悄然无声得帮我导入了包中得TestDemo类 :
这时咱们在src目录中再创立一个同名得TestDemo类:
咱们在这儿必须要经过这种类似于绝对途径的方式来调用,不能经过导包,由于它们的姓名都相同,就算是导包也解决不了重名的问题,编译器辨认不了 :
上面也介绍到了,包拜访权限便是咱们所说的默许权限。
是不是还有些含糊,不要着急,我再用代码为你演示一遍
包权限便是默许权限,意思便是a这个成员变量在demo1这个包底下都能够拜访到
咱们罗列三种状况:
第一种:在本类中
第二种,地点包的其他类中
第三种:
其他包的类当中
咱们就能够验证了包拜访权限便是默许拜访权限了(default)
那么咱们来调查public private润饰往后的权限
咱们在TestDemo中定义了a,b,c三个变量,它们拥有不同的拜访限制润饰符所润饰
那么咱们能够看到在TestDemo这个类中,咱们是能够调用三个数据的
然后咱们在持续看这个demo1底下的别的一个包的调用状况
咱们能够看到,private润饰的c这个成员变量就拜访不到了
接着咱们看其他包中的类引用状况
咱们能够看到只需public润饰的成员变量才能够被拜访到
这个时分那张表格咱们就能够差不多理解了,哪张表格?再给咱们放出来看一下
No | 范围 | private | defaul | protected | public |
---|---|---|---|---|---|
1 | 同一包中的同一类 | ||||
2 | 同一包中的不同类 | ||||
3 | 不同包中的子类 | ||||
4 | 不同包的非子类 |
咱们常用的包
- java.lang:系统常用的基础类(String、Object),此包从JDK1.1后主动导入
- java.lang.reflect:Java反射编程包
- java.net:进行网络编程开发包
- java.sql:进行数据库开发的支撑包
- java.util:是java供给的工具程序包(集合类等)
- java.io:I/O编程开发包
希望能帮到你~
感谢阅读~