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

news2024/12/26 22:22:14

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

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

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

目录

1. 封装

引入封装

访问修饰符  

封装的具体实现 

get方法和set方法

​编辑2. static关键字

static修饰成员变量 

static修饰成员变量的访问

​编辑 static修饰成员方法

static修饰成员方法的访问 

3. 代码块 

代码块概念以及分类

普通代码块

实例代码块

静态代码块


1. 封装

引入封装

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

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

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

我们先写出正常代码

//类
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方法,去获取和设定 成员变量

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 修饰的成员变量,称为静态成员变量 ,静态成员变量最大的特性: 不属于某个具体的对象,是所有对象所共 享的
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 

  public static String classroom = "1班";

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

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


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

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

static修饰成员变量的访问

类名.静态成员变量

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

 static修饰成员方法

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

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

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修饰成员方法的访问 

类名. 静态成员方法 

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. 代码块 

代码块概念以及分类

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

普通代码块

普通代码块:定义在方法中的代码块
public class Test {
    public static void main(String[] args) {

        //普通代码块
        {
            int a = 10;
            System.out.println(a);
        }
    }
}

实例代码块

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

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

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定义的代码块称为静态代码块。一般用于初始化静态成员变量。 

class Person{
    public String name;
    public int age;
    public static String sex;

    //静态代码块
    static {
        sex = "male";
    }

    //实例代码块
    {
        this.name = "小罗";
        this.age = 10;
    }
    

}
注意事项
  • 静态代码块不管生成多少个对象,其只会执行一次
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
  • 实例代码块只有在创建对象时才会执行  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1634188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

55.基于SpringBoot + Vue实现的前后端分离-旅游管理系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的旅游管理系统设计与实现管理工作系统…

ElasticSearch面试题2

Mapping属性详细介绍/常见的字段数据类型: 映射(mapping)︰mapping是对索引库中文档的约束信息(例如字段名、数据类型),类似表的结构约束;每个索引库都应该有自己的映射 数据库一定要先创建表才能去添加数据…

【Java】图书管理系统 介绍与实现

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 1.介绍 图书馆作为知识的殿堂和学术的中心,其管理系统不仅是图书馆管理的必备工具,更是为用户提供优质、高效服务的重要保障,促进了知识的传播和学术的发展。随着…

SpringSecurity + Oauth2 + jwt实现单点登录

文章目录 前言一、springsecurity oauth2 redis方式的缺点二、oauth2认证的4种模式的选择三、认证服务器的编写 第一步、创建WebSecurity配置类第二步、创建jwt仓库配置类第三步、创建UserDetailsService类第四步、创建认证服务器配置类 四、测试认证服务器的功能 1.创建Login…

【简单讲解下FastStone Capture】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

React的数据Mock实现

在前后端分类的开发模式下,前端可以在没有实际后端接口的支持下先进行接口数据的模拟,进行正常的业务功能开发 1. 常见的Mock方式 2. json-server实现Mock 实现步骤: 项目中安装json-server npm i -D json-server准备一个json文件 {"…

Jammy@Jetson Orin Nano - Tensorflow GPU版本安装

JammyJetson Orin Nano - Tensorflow GPU版本安装 1. 源由2. 问题3. 分析3.1 当前版本Tensorflow 2.16.13.2 GPU版本二进制安装3.3 GPU版本源代码安装3.3.1 问题1 ERROR: no such target //tensorflow/tools/pip_package:wheel3.3.2 问题2 fatal error: cstddef file not found…

数据结构(八)----树

目录 一.树的逻辑结构 1.双亲表示法(顺序存储) 2.孩子表示法(顺序链式存储) 3.孩子兄弟表示法(链式存储) 二.树的遍历 1.先根遍历 2.后根遍历 3.层次遍历 三.森林的遍历 1.森林的先序遍历 2.森林的中序遍历 四.哈夫曼…

Flutter创建自定义的软键盘

参考代码: Flutter - Create Custom Keyboard Examples 本文贴出的代码实现了一个输入十六进制数据的键盘: (1)支持长按退格键连续删除字符; (2)可通过退格键删除选中的文字; &…

《HelloGitHub》第 97 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…

护航智慧交通安全 | 聚铭精彩亮相2024交通科技创新及信创产品推广交流会

4月26日,石家庄希尔顿酒店内,河北省智能交通协会盛大举办2024年度交通科技创新及信创产品推广交流会。聚铭网络受邀参与,携旗下安全产品及解决方案精彩亮相,为智慧交通安全保驾护航。 为深化高速公路创新驱动发展战略&#xff0…

CUDA架构介绍与设计模式解析

文章目录 **CUDA**架构介绍与设计模式解析**1** CUDA 介绍CUDA发展历程CUDA主要特性CUDA系统架构CUDA应用场景编程语言支持CUDA计算过程线程层次存储层次 **2** CUDA 系统架构分层架构并行计算模式生产-消费者模式工作池模式异步编程模式 **3** CUDA 中的设计模式工厂模式策略模…

ChatGPT理论分析

ChatGPT "ChatGPT"是一个基于GPT(Generative Pre-trained Transformer)架构的对话系统。GPT 是一个由OpenAI 开发的自然语言处理(NLP)模型,它使用深度学习来生成文本。以下是对ChatGPT进行理论分析的几个主…

用户中心(上)

文章目录 企业做项目流程需求分析技术选型计划初始化项目数据库设计登录/注册⽤户管理(仅管理员可⻅) 初始化项目⼀、前端初始化1.下载nodejs2.Ant Design Pro相关问题1.前端项目启动时报错、无法启动?2.如何初始化前端项目?为什么…

SpringCloud之OpenFeign

学习笔记: 官网地址:https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#spring-cloud-feign 源码:https://github.com/spring-cloud/spring-cloud-openfeign 1、概念总结 OpenFeign是一个声明式的Web服务客户端…

[python数据处理系列] 深入理解与实践基于聚类的过采样与欠采样技术:以K-Means为例

目录 一、过采样介绍 (一)什么是过采样 (二)过采样的优点 (三)过采样的缺点 二、欠采样介绍 (一)什么是欠采样 (二)欠采样的优点 (三)欠采样的缺点 三、基于聚类的欠抽样方法(K-Means欠采样/KMeans-Undersampling) (一)KMeans欠采样原理及其步骤介绍 (二)为什么不采…

上海亚商投顾:沪指创年内新高 房地产板块掀涨停潮

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日继续反弹,沪指盘中涨超1%,重返3100点上方,深成指涨超2%&#…

ArcGIS小技巧—坐标系匹配

坐标系:(Coordinate System):在一些书籍和软件中也叫做空间参考,简单来说,有了坐标系,我们才能够用一个或多个“坐标值”来表达和确定空间位置。没有坐标系,坐标值就无从谈起&#x…

IP定位技术企业网络安全检测

随着信息技术的飞速发展,网络安全问题日益凸显,成为企业运营中不可忽视的一环。在众多网络安全技术中,IP定位技术以其独特的优势,为企业网络安全检测提供了强有力的支持。本文将深入探讨IP定位技术在企业网络安全检测中的应用及其…

在idea中连接mysql

IDE(集成开发环境)是一种软件应用程序,它为开发者提供编程语言的开发环境,通常集成了编码、编译、调试和运行程序的多种功能。一个好的IDE可以大幅提高开发效率,尤其是在进行大型项目开发时。IDE通常包括以下几个核心组…