当前位置: 首页 > news >正文

《Java编程思想》笔记03------访问权限控制

一、包:库单元

包内包含同一组类,它们在单一的名字空间之下被组织在了一起。

例如:在java.util包下,有一个名为ArrayList的类,则这个类的全名为: java.util.ArrayList eg:

//使用import关键字之前
java.util.ArrayList<String> sList1 = new java.util.ArrayList<String>();
sList1.add("Hello");
sList1.add("World");
System.out.println(sList1);
复制代码

为了避免代码过于冗长,引入import关键字:

eg:

在第一行导入包:

import java.util.ArrayList;
复制代码

此后,可在代码中直接使用ArrayList

//使用import关键字之后
ArrayList<String> sList2 = new ArrayList<String>();
sList2.add("Hello");
sList2.add("World");
System.out.println(sList2);
复制代码

补充:如果想导入java.util包下的全部类,则可以使用:

import java.util.*
复制代码

package关键字

用于创建包。

为了创建一个独一无二的包名,我们通常会使用域名反转的方式来作为包名的前半部分,包名的后半部分则表示当前包的功能。例如:

package com.kosmoleung.service
复制代码

package语句必须是文件中第一行非注释代码

运行过程:

找出环境变量CLASSPATH,CLASSPATH用于查找class文件的根目录。从根目录开始,解释器将包名的句点替换成反斜杠,即将com.kosmoleung.service替换为com/kosmoleung/service。解释器会在这个目录下,查找与创建类相关的class文件

静态导入

import static PACKAGE.NAME
复制代码

在权限许可的范围内,允许在代码中直接引用别的类的static变量和方法。

二、JAVA权限修饰词

1.包访问权限(默认)

当前包下的所有其他类对成员具备访问权限,但包以外的类不具备访问权限。

2.接口访问权限

修饰符public,项目下的全部成员均可访问。

3.私有访问权限

修饰词private,只有当前类的成员才有权限访问。

4.继承访问权限

修饰词protected,基类的protected成员只有派生类(子孙类)能够访问。同时,也具备包访问权限

修饰词同一个类同一个包子孙类其他包
publicyesyesyesyes
protectedyesyesyesno
friendly(默认)yesyesnono
privateyesnonono

三、类的访问权限

修饰词必须出现于class关键字之前。

例如:

public class Demo{}
复制代码

限制:

1.每一个文件只能有一个public类

2.这个public类的名称必须完全与文件名匹配

3.类的访问权限既不可以用private来修饰,也不能用protected来修饰。 (如果不需要其他任何人对该类具有访问权限,则可以私有化所有的构造方法。)

特例:对于包访问权限的类,只有同一个包下的类可以访问它,其他包的成员无法对其进行实例化。 但是,包访问权限类中的静态成员,如果用public修饰,则其他包的成员仍然可以访问这个静态成员。

当我们通过私有化构造方法的方式来阻止外界获得当前类的访问权限时,我们可以通过开放一个static方法来实例化当前类。(用途:在实例化之前做一些额外的工作,比如限制数量)

eg:

public class StaticCreateClassDemo {
	public static void main(String[] args) {
		AccessCount.getAccess();
		AccessCount.getAccess();
		AccessCount.getAccess();
		AccessCount.getAccess();
		AccessCount.getAccess();
		AccessCount.getAccess();
	}
}

class AccessCount{
	private static int count = 0;
	private AccessCount(){
		
	}
	public static AccessCount getAccess(){
		count++;
		if(count > 5)
		{
			System.out.println("超过限额,将不再创建对象");
			return null;
		}
		System.out.println("已创建"+count+"个对象");
		return new AccessCount();
	}
}
复制代码

相关文章:

  • 记笔记与博客
  • 树的遍历
  • 菜鸟配置SAMBA服务之1
  • Qt动态设置布局中的控件
  • CISCO无线AP胖瘦升级
  • dotcms总结
  • 设计模式的原则
  • electron
  • 基于BIND实现DNS的解析、主从、子域、请求转发、访问控制
  • Mysql初始化root密码和允许远程访问
  • 软件项目隐形成本
  • MyBatis返回类型resultType和resultMap
  • 一个简单的git应用教程
  • CSS3 动画及过渡详解
  • wordpress模板文件及函数调用
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Android 架构优化~MVP 架构改造
  • CSS魔法堂:Absolute Positioning就这个样
  • docker容器内的网络抓包
  • exif信息对照
  • github指令
  • Logstash 参考指南(目录)
  • node学习系列之简单文件上传
  • React中的“虫洞”——Context
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spring security oauth2 password授权模式
  • Sublime text 3 3103 注册码
  • Swoft 源码剖析 - 代码自动更新机制
  • uva 10370 Above Average
  • 第十八天-企业应用架构模式-基本模式
  • 二维平面内的碰撞检测【一】
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 线性表及其算法(java实现)
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • Nginx实现动静分离
  • raise 与 raise ... from 的区别
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (java)关于Thread的挂起和恢复
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (六)vue-router+UI组件库
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)EOS中账户、钱包和密钥的关系
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • 、写入Shellcode到注册表上线
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET简谈设计模式之(单件模式)
  • 。Net下Windows服务程序开发疑惑
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @TableId注解详细介绍 mybaits 实体类主键注解