JAVA系列 小白入门参考资料 类和对象(3)

embedded/2024/9/24 0:40:35/

温馨提示 此篇文章需要前两篇文章作为基础。

JAVA系列 小白入门参考资料 类和对象(1)​​​​​​​ 

JAVA系列 小白入门参考资料 类和对象(2)

目录

1. 封装

引入封装

访问修饰符  

封装的具体实现 

get方法和set方法

​编辑2. static关键字

static修饰成员变量 

static修饰成员变量的访问

​编辑 static修饰成员方法

static修饰成员方法的访问 

3. 代码块 

代码块概念以及分类

普通代码块

实例代码块

静态代码块


1. 封装

引入封装

何为封装呢?简单来说就是制造外壳保护细节 
举个例子:计算机 

我们平时见到的台式计算机只是一个外壳,我们可以接触到的只有开关键。但计算机内部如何去运行,管理,保存数据,我们对此是不了解的。 因此我们可以认为计算机生产厂商,为了保护计算机内部去套壳,既保护了电脑,也保护了计算机内部运行的信息。

下面我们开始正式的讲解封装

我们先写出正常代码

java">//类
class Student{//成员属性String name;int age;//成员方法public void eat(){System.out.println(this.name + "在吃饭");}public void sleep(){System.out.println(this.name + "在睡觉");}public void show(){System.out.println("姓名 " + this.name + " 年龄 " + this.age);}
}//类的使用者
public class Blog {public static void main(String[] args) {//实例化一个对象Student student = new Student();student.name = "小罗";student.age = 10;//调用方法student.eat();student.sleep();student.show();}
}

这里的Student类 就好比 是前文所说的计算机,而其中的成员变量和成员方法就好比是计算机内部的器件和运行规则。而我们的 Blog 类 就好比是我们自己(实际使用者)。

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互  

访问修饰符  

因为实现封装需要修饰符private,在此我们先补充访问修饰符的概念

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问修饰符:
public   protected  默认修饰符  private   

我们以人(小明)为例子来理解访问修饰符

public: 小明的公共信息,比如外貌,衣着打扮,等等。对比Java来说就是所有人都可以访问(没有限制)

默认修饰符: 小明家庭(同一个包)才知道小明的信息(秘密)。

private:小明(同一类)自己才知道的秘密

提示:访问权限除了可以限定类中成员的可见性,也可以控制类的可见性

封装的具体实现 

                                                用private修饰,此时已经报错

那我们需要用到成员变量时要怎么办呢? 

我们可以自己在类中创造方法来 获取和设定 成员变量(Java中已经给好了相应的方法) 

get方法和set方法

我们可以通过get方法和set方法,去获取和设定 成员变量

java">class Student{//成员属性private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//成员方法public void eat(){System.out.println(this.name + "在吃饭");}public void sleep(){System.out.println(this.name + "在睡觉");}public void show(){System.out.println("姓名 " + this.name + " 年龄 " + this.age);}
}//类的使用者
public class Blog {public static void main(String[] args) {//实例化一个对象Student student = new Student();//调用set get方法student.setName("小罗");student.setAge(10);System.out.println(student.getName());System.out.println(student.getAge());student.eat();student.sleep();student.show();}
}


2. static关键字

我们借用前面所用的学生类,来谈论static

在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。   

static修饰成员变量 

static 修饰的成员变量,称为静态成员变量 ,静态成员变量最大的特性: 不属于某个具体的对象,是所有对象所共 享的
java">class Student{//成员属性public String name;public int age;public String classroom;public Student(String name, int age, String classroom) {this.name = name;this.age = age;this.classroom = classroom;}}//类的使用者
public class Blog {public static void main(String[] args) {//实例对象Student student = new Student("小罗",10,"1班");Student student1 = new Student("小泽",9,"1班");Student student2 = new Student("小美",12,"1班");}
}

以下是在调试过程中,初始化后 对象引用的属性 

因为大家都在一个班级,都是大家共有的属性,没有必要仍然给每个人去赋值,这时我们尝试去给classroom去加static 

java">  public static String classroom = "1班";

在调试过程中 班级这个信息已经没有了

因为classroom加上static之后,classroom这个属性已经变成了Student类的静态成员变量,意思是每创建一个Student类的对象都会自带classroom


在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。   
【静态成员变量特性】
1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

静态成员变量不依赖于对象 

static修饰成员变量的访问

类名.静态成员变量

java">System.out.println(Student.classroom);
Student.classroom = "2班";
System.out.println(Student.classroom);

 static修饰成员方法

Java 中, static 修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的 。静态成员一般是通过静态方法来访问的。

 原理和static修饰的成员变量相似

java">class Student{//成员属性public String name;public int age;public static String classroom = "1班";public Student(String name, int age) {this.name = name;this.age = age;}public static String getClassroom(){return classroom;}}//类的使用者
public class Blog {public static void main(String[] args) {//实例化对象Student student = new Student("小罗",10);//调用静态方法System.out.println(Student.getClassroom());}
}

static修饰成员方法的访问 

类名. 静态成员方法 

java">class Student{//成员属性public String name;public int age;public static String classroom = "1班";//直接初始化静态变量public Student(String name, int age) {this.name = name;this.age = age;}public static String getClassroom(){return classroom;}}//类的使用者
public class Blog {public static void main(String[] args) {//实例化对象Student student = new Student("小罗",10);//调用静态方法System.out.println(Student.getClassroom());}
}

静态方法特性
1. 不属于某个具体的对象,是类方法
2. 可以通过对象调用,也可以通过类名 . 静态方法名 (...) 方式调用,更推荐使用后者
3. 不能在静态方法中访问任何非静态成员变量  
4. 静态方法中不能调用任何非静态方法,因为非静态方法有 this 参数,在静态方法中调用时候无法传递 this 引用 (因为this的调用需要对象,而静态成员方法和静态成员变量都不需要对象引用)

3. 代码块 

代码块概念以及分类

使用 {} 定义的一段代码称为代码块 。根据代码块定义的位置以及关键字,又可分为以下四种:
  • 普通代码块
  • 构造块
  • 静态块
  • 同步代码块(后面线程再说)

普通代码块

普通代码块:定义在方法中的代码块
java">public class Test {public static void main(String[] args) {//普通代码块{int a = 10;System.out.println(a);}}
}

实例代码块

构造块:定义在类中(方法之外)的代码块(不加修饰符)。也叫:实例代码块

构造代码块一般用于初始化实例成员变量 

java">class Person{public String name;public int age;
//    public static String sex;//实例代码块{this.name = "小罗";this.age = 10;}public void show(){System.out.println("name: "+name+" age: "+age);}}public class Test {public static void main(String[] args) {Person person = new Person();person.show();}
}

静态代码块

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。 

java">class Person{public String name;public int age;public static String sex;//静态代码块static {sex = "male";}//实例代码块{this.name = "小罗";this.age = 10;}}
注意事项
  • 静态代码块不管生成多少个对象,其只会执行一次
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
  • 实例代码块只有在创建对象时才会执行  


http://www.ppmy.cn/embedded/24225.html

相关文章

飞腾FT2000/4+银河麒麟全国产VPX架构 6U尺寸标准板卡,适用于船舶、交通等领域

XM-FT2000-VPX主板 XM-FT2000-VPX主板为VPX架构 6U尺寸标准板卡,提供的接口有DVI、USB、网络、UART、PCIE等接口。 处理器: FT2000/4四核国产处理器 芯片: 兆芯ZX-200芯片组 内存: 国产内存颗粒,双通道DDR4&#xff0…

十九、XML Extensible Markup Language

1、DTD简介 如果XML内容写错了怎么办? 如何校验XML语法的正确与否? 1)什么是DTD DTD(文档类型定义)可以定义合法的XML文档结构,它使用一系列合法元素来定义文档的结构。DTD分别为内部DTD和外部DTD,所谓内部DTD是指该DTD在某个文档的内部,只被该文档使用。外部DTD是指该DT…

238 基于matlab的水平轰炸弹道的求解

基于matlab的水平轰炸弹道的求解,列出轰炸弹道方程组并利用龙格库塔法解算弹道方程。设计中包含了二维弹道与三维弹道的计算,并都绘制了弹道运动轨迹,最终还将整个题目集中在一个图形用户界面(GUI)上。程序已调通&…

使用 Microsoft 成本管理 + 计费控制 Azure 支出和管理账单

原文:Control Azure spending and manage bills with Microsoft Cost Management and billing learning path - Training | Microsoft Learn Azure Well-Architected Framework 是一个设计框架,可通过帮助工作负载执行以下操作来提高工作负载的质量&…

Docker学习笔记

1.什么是Docker Docker是基于Go语言实现的云开源项目。Docker的主要目标是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到一次封装,到处运行。 2.…

【Linux】基于tcp的简单服务器程序

目录 服务端 成员变量 成员函数 工作流程 客户端 头文件和命名空间 信号处理函数 使用说明和重试机制 访问服务器的函数 主函数 总结和注意事项 所用到的其他类 线程池 线程类 翻译业务类 禁止拷贝类 守护锁类 网络地址转换类 日志类 守护进程类 服务端 这…

慢SQL问题全解析:原因诊断与性能优化策略

慢SQL的定义: 执行时间长的 慢SQL的筛选: 1.使用MySQL自带的日志 查看慢查询日志是否开启: SHOW VARIABLES LIKE %slow_query_log%; 开启慢查询日志:使用该方法开启MySQL的慢查询日志只对当前数据库生效,如果MySQ…

代码学习录打卡Day13

1 滑动窗口最大值 使用单调队列,需要一个队列,这个队列呢,放进去窗口里的元素,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。 class MyQueue { public:vo…