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

封装和static

目录

1、封装概述

2、封装的步骤

1、 修改属性的可见性

2、 设置setter/getter()方法

3、 设置属性的存取限制

Java里的包

1、包的概述

包主要有以下3个方面的作用:

2、包的定义

定义包的语法格式如下:

package 包名;

3、包的使用

Java访问修饰符

类和类成员的访问控制

1、 类的访问修饰符

2、 类成员的访问修饰符

static关键字

1、 用static关键字修饰属性

2、 用static关键字修饰方法

3、使用static关键字修饰代码块


1、封装概述

(1)Java中封装的实质就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而是通过

该类提供的方法来实现对隐藏信息的操作和访问。

(2)封装反映了事物的相对独立性,有效避免了外部错误对此对象的影响,并且能够对对象使用

者由于大意产生的错误起到预防作用。

(3)面向对象编程提倡对象之间实现松耦合关系。

(4)封装的好处在于隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以

方便地加入存取控制修饰符,来限制不合理操作。

(5)松耦合就是指尽量减少对象之间的关联性,以降低它们之间的复杂性和依赖性。

2、封装的步骤

1、 修改属性的可见性

将类中的属性由public修改为private即可。

2、 设置setter/getter()方法

可以手动添加setter/getter()方法,也可以使用组合键Ctrl+Shift+S由系统添加。

3、 设置属性的存取限制

在setter()方法中进一步利用条件判断语句进行赋值限制。

private String name;
	penguin.name= "QQ";//name 报错

 用private封装后就不能直接调用

 

Java里的包

1、包的概述

Java中的包机制也是封装的一种形式。

包主要有以下3个方面的作用:

1)允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件。

2)防止命名冲突:Java中只有在不同包中的类才能重名。

3)包允许在更广的范围内保护类、数据和方法。根据访问规则,包外的代码有可能不能访问该

类。

4)在同一个类中使用不同包中的同名类时,需要使用完整的包名来区别同名类。

2、包的定义

定义包的语法格式如下:

package 包名;

-->package是关键字。

-->包的声明必须是Java源文件中的第一条非注释性语句,而且一个源文件只能有一个包声明语

句,设计的包需要与文件系统结构相对应。

-->在包命名时,要遵守以下编码规范:

1)一个唯一的包名前缀通常是全部小写的ASCII字母,并且是一个顶级域名com、edu、gov、net

及org,通常使用组织的网络域名的逆序。

例如,如果域名为Javagroup.net,可以声明包为“package net.javagroup.mypackage;”。

2)包名的后续部分依据不同机构各自内部的规范不同而不同。这类命名规范可能以特定目录名的

组成来区分部门、项目、机器或注册名。

如“package net.javagroup.research.powerproject;”。

research:项目名

powerproject:部门名

3、包的使用

(1)声明包的含义是声明当前类所在的包。

(2)导入包的含义是声明在当前类中要使用到的其他类所在的包

-->导入包使用import关键字。

cn.bdqn.demo01.Penguin p1 = new cn.bdqn.demo01.Penguin();
		
cn.bdqn.demo02.Penguin p2 = new cn.bdqn.demo02.Penguin();		

 

-->一个类中可以导入多个其他包

-->导包语句在包语句之后、类定义语句之前。

Java访问修饰符

类和类成员的访问控制

(1)包实际上一种访问控制机制,通过包来限制和制约类之间的访问关系。

(2)访问修饰符也同样可以限制和制约类之间的访问关系。

1、 类的访问修饰符

修饰符    同一包中      非同一包中

public     可以使用       可以使用

默认修饰符   可以使用     不可以使用

2、 类成员的访问修饰符

修饰符        同一类中        同一包中         子类中            其他地方

private         可以使用        不可以使用     不可以使用      不可以使用

默认修饰符   可以使用       可以使用          不可以使用      不可以使用

protected      可以使用       可以使用           可以使用          不可以使用

public            可以使用        可以使用          可以使用          可以使用

// 创建Student类对象
		Student stu = new Student();
		stu.name = "李四";
		// 不同包里的类不能访问其它包中使用protected修饰的属性
		// stu.age = 19;
		
		// 不同包里的类不能访问其它包中使用默认修饰符修饰的类
		// stu.address = "安徽合肥";

		//不同包里的类不能访问其他包中使用private修饰的类
		// stu.gender = '男';

static关键字

static关键字

(1)一个类可以创建n个对象。如果n个对象中的某些数据需要共用,就需要使用static关键字修饰

这些数据。

(2)Java中,一般情况下调用类的成员都需要先创建类的对象,然后通过对象进行调用。

(3)使用static关键字可以实现通过类名加“.”直接调用类的成员,不需要创建类的对象。

(4)使用static修饰的属性和方法属于类,不属于具体的某个对象。

1、 用static关键字修饰属性

(1)用static修饰的属性称为静态变量或者类变量,没有使用static修饰的属性称为实例变量。

(2)使用static修饰的属性不依赖于任何对象,用类名直接加“.”调用即可。

(3)在实际开发中,用static关键字修饰属性的最常用场景就是定义使用final关键字修饰的常量。

4)使用final关键字修饰的常量在整个程序运行时都不能被改变,和具体的对象没关系,因此使用

static修饰。如:static final int PERSON_LIVE = 1;

(5)常量名由大写字母组成,多个单词之间使用下划线“_”分隔。

(6)声明常量时一定要赋初值。

2、 用static关键字修饰方法

(1)用static修饰的方法称为静态方法或者类方法,不用static关键字修饰的方法称为实例方法。

(2)在静态方法中不能直接访问实例变量和实例方法。(需要使用对象访问)

(3)在实例方法中可以直接调用类中定义的静态变量和静态方法。
 

3、使用static关键字修饰代码块

 (1)用static修饰的代码块称为静态代码块。

 (2)静态代码块随着类的加载一起执行

(3)一个类中有多个静态代码块时,按照顺序从上往下依次执行,只执行一次

// 定义静态变量
	static int num = 10;
	//定义一个普通变量
	int number =1000;
	
	//定义静态常量
	 final static String STR = "hello world";

	// 定义静态代码块

	static {
		System.out.println("我是静态代码块2");
	}
	static {
		System.out.println("我是静态代码块1");
	}

	static {
		System.out.println("我是静态代码块3");
	}

	// 定义静态方法
	public static void test1() {
		System.out.println("我是静态方法");
	}

}

相关文章:

  • LF-YOLO: A Lighter and Faster YOLO for Weld Defect Detection of X-ray Image
  • JavaScript随手笔记---保留小数位
  • 检查网络端口是否正常
  • 基于JavaSwing开发房产管理系统(access数据库) 课程设计 大作业
  • [面试直通版]操作系统之编程语言与运行原理(下)
  • DFP 数据转发协议规则说明
  • Qt开发经验小技巧246-250
  • 《算法导论》第14章-数据结构的扩张 14.1-动态顺序统计 14.2-如何扩张数据结构
  • 前端面试丨综合整理中高级前端最新面试题
  • 大端与小端
  • GBase 8c 数据库内置角色
  • 无需训练、APP可玩,商品、车辆、菜品20+场景一键识别
  • 【Linux 基础笔记】(一)
  • Notion + CloudFlare + 域名搭建网站
  • 自媒体平台上剪视频的素材都是从哪来的?
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【译】理解JavaScript:new 关键字
  • CSS 专业技巧
  • go append函数以及写入
  • iOS 系统授权开发
  • jdbc就是这么简单
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用docker-compose进行多节点部署
  • 思否第一天
  • 思考 CSS 架构
  • 微信小程序--------语音识别(前端自己也能玩)
  • 国内开源镜像站点
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # 安徽锐锋科技IDMS系统简介
  • #DBA杂记1
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (pojstep1.3.1)1017(构造法模拟)
  • (zt)最盛行的警世狂言(爆笑)
  • (多级缓存)多级缓存
  • (二)linux使用docker容器运行mysql
  • (力扣)1314.矩阵区域和
  • (三)elasticsearch 源码之启动流程分析
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)http-server应用
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)Unity3DUnity3D在android下调试
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Micro Framework初体验
  • .net 托管代码与非托管代码
  • .NET处理HTTP请求
  • @ConditionalOnProperty注解使用说明
  • @javax.ws.rs Webservice注解
  • @软考考生,这份软考高分攻略你须知道
  • [Avalon] Avalon中的Conditional Formatting.