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

Java基础--封装+static

目录

什么是封装?

什么是访问限定符?

static静态修饰符

用static修饰的类变量或类方法的注意事项:


什么是封装?

封装是面向对象的三大特性之一,指的是将一个类中的实现细节进行隐藏,对外只提供一些开放的接口而看不见内部的字段,通过访问限定符来控制对数据的访问,以此来提高程序的安全性。那么怎么实现封装呢?通常使用private关键字对类中的成员变量进行封装起来,通过用public方法提供对属性的访问和修改:

class Student{//在Student类外面直接访问是访问不到private修饰的成员变量的;private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}//不能够直接访问字段,而我们可以写一些方法间接访问public void setName(String name) {this.name = name;}//获取name的方法public String getName() {return name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void write(){System.out.println(this.name+"正在写作业");}
}
public class Test {public static void main(String[] args) {Student student = new Student("张三",10);//写完setName就可以修改字段了student.setName("小张");//通过getName方法去获取姓名System.out.println(student.getName());student.write();}
}

运行结果:

什么是访问限定符?

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了以下访问限定符:

范围

private

protectedpublic
同一包中的同一类
同一包中的不同类
不同包中的子类
不同包中的非子类
  • 访问权限除了可以限定类中成员的可见性,也可以控制类的可见性 
  • 一般情况下成员变量设置为private,成员方法设置为public。

static静态修饰符

static修饰成员变量:被static修饰的成员变量,它属于类本身,而不是类的某个对象,称为类对象;在计算机中只有一份,能被类中的所有对象共享。没有被static修饰成员变量,它属于类的每个对象。每个对象在创建时都会拥有自己的一份实例变量。实例变量的内存空间在对象创建时分配,在对象销毁时释放。

public class Student {//实例变量,属于对象,每个对象都有自己的实例变量public String name;public int age;//类变量(静态变量),属于类,所有对象共享//当每个Student的教室都是相同的时候需要用到类变量会更加方便一些public static String classRoom = "2-412";public Student(String name, int age) {this.name = name;this.age = age;}public static void main(String[] args) {// 创建两个Student对象Student s1 = new Student("张三", 18);Student s2 = new Student("李四", 19);//实例化成员变量只能通过先实例对象,对象.成员变量来访问。System.out.println(s1.name);//静态成员变量可以直接通过类名访问System.out.println(Student.classRoom);//也可以通过对象访问System.out.println(s1.classRoom);}
}

 通过以上的例子可以知道: 类变量可以通过类名.成员变量的方法来直接访问;当然可以通过实例化个对象,通过对象.成员变量方法来访问。而只能通过通过实例化个对象,通过对象.成员变量方法来访问。

被static修饰成员方法:也是一样的规则类方法通过类名.成员的方法来直接访问,也可以通过实例化个对象,通过对象.成员方法来访问。而只能通过通过实例化个对象,通过对象.成员方法来访问。

public class Student {// 类变量(静态变量),属于类,所有对象共享private static int studentCount = 0;// 实例变量,属于对象,每个对象都有自己的实例变量private String name;private int age;// 构造方法public Student(String name, int age) {this.name = name;this.age = age;studentCount++; // 每次创建对象时,类变量studentCount自增}// 静态方法,可以访问类变量,但不能直接访问实例变量public static int getStudentCount() {return studentCount;}// 实例方法,可以访问实例变量和类变量public void displayInfo() {System.out.println("Name: " + name + ", Age: " + age);System.out.println("Total students: " + studentCount);}public static void main(String[] args) {// 创建两个Student对象Student student1 = new Student("Alice", 20);Student student2 = new Student("Bob", 22);// 通过类名访问类变量 System.out.println("Total students: " + Student.getStudentCount());// 调用实例方法student1.displayInfo();student2.displayInfo();}
}

用static修饰的类变量或类方法的注意事项:

  • 在静态方法的内部 不能使用非静态的数据成员
  • this 不能出现在静态方法当中

http://www.lryc.cn/news/582154.html

相关文章:

  • 软件工程功能点估算基础
  • 软件工程功能点估算法常用术语介绍
  • jmm-内存屏障
  • MMaDA:多模态大型扩散语言模型
  • 边缘计算新底座:基于VPP+DPDK的开放智能网关
  • kafka总结
  • AI + 数据治理的趋势:让治理更智能、更敏捷
  • Web Worker:让前端飞起来的隐形引擎
  • 七牛云Java开发面试题及参考答案(60道面试题汇总)
  • 【C语言】指针与回调机制学习笔记
  • 1-Kafka介绍及常见应用场景
  • CAIDCP AI驱动安全专家认证将于8月正式上线,首期班开始报名
  • c++-引用(包括完美转发,移动构造,万能引用)
  • Qt中的坐标系
  • 算法————模拟算法
  • 机房运维篇(添加备份盘)加备份
  • mac中有多个java版本涉及到brew安装中,怎么切换不同版本
  • Playwright vs TestCafe 对象注入机制详解对比
  • Redis Tag 字段详解与最佳实践
  • 可扩展 Redis 查询引擎的最佳实践
  • 人工智能-基础篇-22-什么是智能体Agent?(具备主动执行和调优的人工智能产物)
  • DejaOS常见问题
  • (4)ROS2:moveit2的几个坑
  • 多通道采发仪VS系列 智能监测终端 工业级采发仪精准守护隧道边坡、水利大坝
  • 【Echarts】“折线+柱状”实现双图表-家庭用电量可视化【文章附完整代码】
  • 【SigNoz部署安装】Ubuntu环境部署SigNoz:Docker容器化监控的全流程指南
  • 御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
  • HTTP 重定向
  • Camera相机人脸识别系列专题分析之十六:人脸特征检测FFD算法之libcvface_api.so数据结构详细注释解析
  • C++ -- string类的模拟实现