JAVA笔记 -- 访问权限控制
访问权限控制
没有权限控制的时候,由于所有的接口都是可以访问的。当一个类库部分代码,发现有更好的方法解决的时候,可能其他接口会发生改动。这会导致另一个地方的引用该类库的程序发生崩溃。为了解决这种问题,权限管理就显得尤为重要了。
在Java中提供了访问权限控制修饰词。以供类库开发人员向客户端程序员说明哪些功能是可以用的,那也有是不可以用的。
一、包:库单元
包内含有一组类,他们在单一的名字空间之下被组织到了一起
类名冲突?不存在的
在程序中,如果需要其他包的类,就需要导入。
import java.util.*;
之所以要导入,就是因为要提供一个管理名字空间的机制。所有类之间的名字是相互隔离的。如果在机器上编写了相同名字的类,那个为每个类创建唯一的命名空间就会非常重要。
单一文件中的代码,并不是不位于包中,而是已存在于未命名包中。
代码组织
类库实际上是一组类文件。每个文件,都有一个public类,以及任意数量的非public类。
使用package语句,这个语句必须放在除注释以外的第一句程序代码:
//这是一句注释
package accsess.mypackage;
public class MyClass {
// 假装里面有内容
}
如果其他地方需要用这个类,那个就需要用引入import access.mypackage.*;或者使用全名access.mypackage.MyClass
创建一个独一无二的包名
那个男孩不想要一个独一无二的包名呢?
java包的命名用域名的方式来命名。众所周知,域名是不会重复的,是唯一的。这样的好处是,可以减少重复,而且方便别人的记忆。
环境变量CLASSPATH可以提供查找包的位置并且是全局的!
CLASSPATH=.;D:\JAVA\JPackage
承接上文内容,java.util.*和my.mypackage.*均存在一个类,叫做Vector那么,
import java.util.*;
import my.mypackage.*;
public class LibTest{
public void main(){
//! 下面的这一行代码会报错,因为你,我,编译器都不知道是那个包里面的Vector类
//! Vector V = new Vector();
//因此要求使用全名,如下方的实例相同
java.util.Vector V1 = new java.util.Vector();
my.mypackage.Vector V2 = new my.mypackage.Vector();
}
}
定制工具库
通过包就可以定制自己的专属工具库了
//这里就举例一个Print的工具库吧!
//这里就可以使用港方编辑的静态类来解决问题了
public class Print {
public static void print(Object obj) {
System.out.println(obj);
}
public static void print() {
System.out.println();
}
public static void printnb(Object obj) {
System.out.print(obj);
}
public static PrintStream
printf(String format, Object... args) {
return System.out.printf(format, args);
}
}
二、Java访问权限修饰词
权限修饰词
public,private和protected(包访问权限又是也被称为friendly)
包访问权限
包访问权限允许包内的各个类组合起来,以便使他们彼此之间可以轻易地相互作用。
类控制着哪些代码具有访问自己成员的权限。获取某成员的唯一途径是:
- 使得该成员为public。无论是谁,无论在何地,都可以访问该成员。
- 不加访问权限修饰词,将其他类放置在与该成员相同的包中。
- 继承。
- 提供访问器(accessor)和变异器(mutator)方法读取和改变数值。如
xxx.get(),xxx.set(Object obj)。
public:接口访问权限
使用关键字public以后,意味着成员对每个人都是可用的。
Java并不总是将当前目录视为查找行为的起点之一。如果CLASSPATH缺少
.作为路径之一的话,Java就不会查找那里。
默认包
//文件一:Cake.java
class Cake{
public static void main(String[] args){
Pie x = new Pie();
x.f();
}
}
//文件二:Pie.java
class Pie{
void f(){
System.out.println("Pie.f()");
}
}
//文件一、二均位于同一文件夹下
尽管这两个文件看似没啥关系,但是,他们的确享有包的访问权限。Java将这样的文件看作是隶属于该目录的默认包中。该目录中的所有其他文件拥有包的访问权限。
private:你无法访问
除了包含这个成员的类除外,其他的任何类都无法访问该成员。
由于对
private关键字没有啥感情,暂且写这么多吧!
protected:继承访问权限
基类的创建者希望有某个特定的成员,把对它的访问权限赋予派生类而不是所有类。那么就需要protected来完成这样的工作。
在后续的继承中会说明具体使用情况的QAQ
三、接口和实现
访问权限的控制常称为是具体实现的隐藏。把数据和方法包装进类中,以及具体实现的隐藏。包装后的结果是,一个同时带有特征和行为的数据类型。
JAVA笔记 -- 访问权限控制的更多相关文章
- Java基础—访问权限控制
Java中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...
- 【Java_基础】Java的访问权限控制
1.类成员的访问权限控制 Java中类成员的访问权限分为四类:private,无(默认情况下),protected和public.其权限控制如下表所示: 修饰词 本类 同一个包的类 继承类 其他类 p ...
- java 的访问权限控制
package test06; public class PermissionModel { private int age; public String name; public int getAg ...
- JAVA访问权限控制[zhuan]
Java的访问权限控制修饰符,从最大权限到最小权限依次是:public.protected.包访问权限(默认,没有关键字)和private.对于类的访问权限只能是:public和包访问权限(但内部类可 ...
- 论Java访问权限控制的重要性
人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说“钱乃身外之物,生不带来死不带去”,但我们又都知道“有钱能使鬼推磨” ...
- 初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制
包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称 ...
- 《Java编程思想》笔记 第六章 访问权限控制
1.编译单元 一个 编译单元即 .java 文件 内只能有一个 public 类 且该文件名必须与public 类名 完全一致. 编译单元内也可以没有public类 文件名可随意. 2. 包:库单元 ...
- (转)浅析Java中的访问权限控制
原文地址: http://www.cnblogs.com/dolphin0520/p/3734915.html 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下 ...
- [THINKING IN JAVA]访问权限控制
6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...
随机推荐
- vue hover如何触发事件?
vue中并没有 @hover 事件,但是可以使用 @mouseenter 和 @mouseleave 来模拟hover操作.
- 18.JAVA-pull解析XML
1.pull解析介绍 pull解析其实和我们上章学的sax解析原理非常类似,在Android中非常常用. 在java中,需自己获取xmlpull所依赖的类库分别为:kxml2-2.3.0.jar,xm ...
- leetcode菜鸡斗智斗勇系列(1)---把一个链表中的二进制数字转换为一个整型数(int)
Convert Binary Number in a Linked List to Integer这道题在leetcode上面算作是“easy”,然而小生我还是不会做,于是根据大佬的回答来整理一下思路 ...
- 对于prim的一个有趣但有点奇怪的想法
prim算法找最小生成树适用于无向图,对于有向加权图会产生错误. 比如 1->2,8 1->3,8 2->3,4 3->2,3 最小生成树1->2->3 而不是3- ...
- 【2019的idea插件jreber使用】
前言 前面的idea安装说明已经可以完全使用了,没有安装的2019版idea的小伙伴可以去参考我上面的博客:https://www.cnblogs.com/liwangwang/p/11348434. ...
- Centos7启动防火墙时报错Failed to start IPv4 firewall with iptables
今天在虚拟机的Linux系统(centos7)里安装Redis,准备学习一下布隆过滤器呢,安装完后使用Windows本机访问不了虚拟机里的Redis,telnet不通能够ping通.于是就去看防火墙, ...
- jquery.i18n 网站呈现各国语言
在做网站的时候可能会遇到不同语言切换的问题,实现的方法有很多种,本篇文章按照 js 加载的方法的来实现. 应用到的 js 文件: jquery.i18n.properties.js jquery.js ...
- django找不到模板的错误处理django.template.exceptions.TemplateDoesNotExist: blog/list.html
错误提示如下图: 程序出错对于程序员而言是最常见的,一般解决的要点是看清错误提示(读懂英文很重要) 根据错误提示 blog\list.html这个文件不存在,也就是没找到资源 这个时候需要去检查有没有 ...
- netcore 2.2 使用 Autofac 实现自动注入
Autofac自动注入是通过名称约定来实现依赖注入 ps:本demo接口层都以“I”开头,以“Service”结尾.服务层实现都以“Service”结尾. 为什么要实现自动注入 大多时候,我们都是 以 ...
- 在cnetos7上搭建mysql主从服务
本文主要是介绍在centos上搭建mysql的主从服务器.如果没有搭建过的,可以查看我以前的博客,里面有详细的安装centos和在centos上安装mysql的说明. 一.安装从虚拟机: 1.右键—& ...