学点儿Java_Day6_面向对象:类、封装、构造方法

news2024/9/20 1:13:56

1 类

1.1 定义

类:对现实世界中事物的抽象。Student
对象:现实世界中具体的个体。张三、李四 这些具体的学生

面向对象的特征:抽象、封装、继承、多态
OOP: Object Oriented Programming

类和对象的总结:
1、现实世界都是由很多对象组成的,基于对象的共同特征抽象出类。
2、对象:真实存在的对象
3、类中包含:
1)所有对象所共有的特征–属性(静)
2)所有对象所共有的行为–方法(动)
4、类是对象的模板,对象是类的具体实例。
5、一个类可以创建多个对象:同一个类的不同对象,结构相同,数据不同。

1.2 易混淆知识点

Java是编译型、强类型语言
JavaScript是解释型、弱类型语言

1.3 数据类型的默认值

int类型默认值是:0
double类型默认值是:0.0
boolean类型默认值是:false
String类型默认值是:null
int[]类型默认值是:null
Student[]类型默认值是:null
boolean[]类型默认值是:null

int[] array = new int[3]; 里面的存放默认值是0
boolean[] array = new boolean[3];
里面的存放默认值是false
Student[] array = new Student[3];里面的存放默认值是null

1.4 增强的for循环

@Test
public void test3() {
    int[] array1 = new int[3];
    boolean[] array2 = new boolean[3];
    Student[] students = new Student[3];
    for (int i = 0; i < students.length; i++) {
        System.out.println(students[i]);
    }
    //增强的for循环
    for (Student student : students) {
        System.out.println(student);
    }

在这里插入图片描述

1.5 空指针异常

ArrayIndexOutOfBoudsException 数组下标越界异常
NullPointerException空指针异常(引用数据类型)

    @Test
    public void test4() {
        //NullPointerException空指针异常(引用数据类型)
        Student student = null;
        System.out.println(student);//null
        // null.方法   null.属性
        System.out.println(student.id);
    }

在这里插入图片描述

2 toString()

涉及到一点继承的知识点,先看现象,后边再解释。
当我们定义了一个Student类,并在测试类中new一个Student对象并尝试打印它的内容时,会发生什么

//Student类
public class Student {
    //属性、字段
    //属性私有private,只有类的内部可以访问
    int id;
    String name;
    int age;
    String gender;
}
    //测试类
    @Test
    public void test99() {
        Student student = new Student();
        student.id = 1;
        student.age = 167;
        System.out.println(student);
    }

在这里插入图片描述
并是不我们想要的结果,至于这个结果具体是什么暂且按下不表。
原因就是我们并没有在Student类中写一个我们自己想要的打印的形式,IDEA规定了就叫toString()方法,我们可以手敲,也可以生成
在这里插入图片描述
有了这个toString(),就可以用sout输出Student类的属性了
在这里插入图片描述
会写的前提下,用IDEA自动生成可以节省时间,提高效率

3 封装 private/get/set

3.1 概述

面向对象的封装是一种编程概念和原则,它通过将数据和操作封装在一个对象中,以实现信息隐藏和安全性。
封装使得对象的内部细节对外部不可见,只暴露必要的接口供其他对象进行交互。

//属性私有private,只有类的内部可以访问
private age;

// 属性私有,通过get、set方法访问:
public void setAge(int age) {
    if (age >= 1 && age <= 125) {
        // The assignment to variable age has no effect
        // this.age 代表的就是属性age
        this.age = age;
    }
}

public int getAge() {
    // return age;
    return this.age;
}

get、set方法,同样是自己会写的基础上,可以通过代码工具生成
在这里插入图片描述

3.2 就近原则

    //set方法: setAge() setName()
    public void setAge(int age) {
        //Variable 'age' is assigned to itself
        //就近原则
        age = age;
        //this代表当前对象
        if (age >= 0 && age <= 120) {
            this.age = age;
        }
    }

在这里插入图片描述

4 构造方法

构造方法是new对象时候调用方法,特点:
1.方法名和类名一样
2.没有返回值
3.在new对象的时候会调用构造方法

//无参构造方法
//如果不写,Java默认提供这样一个无参构造方法.
//如果你写了,Java就不会再提供这个无参构造方法
public Student() {
   System.out.println("Student.Student()");
}

//有参构造方法
public Student(int id, String name, int age, String gender) {
   this.id = id;//把1这个值赋值给当前new出来的student对象的id属性
   this.name = name;
   this.age = age;
   this.gender = gender;
}

Student student = new Student(2, "李四", 24, "男");
System.out.println(student);

1、如果不写任何构造方法,系统默认提供一个无参数构造方法,只是我们看不到而已。
2、如果自己写了任何一个构造方法,不管有参没参,系统就不会提供这个默认无参构造方法。
3、自己写了一个带参数的构造方法,就要把无参数构造方法也要写上。 (后面使用或者学习的一些框架要new这个无参数的构造方法)

构造方法和一般方法的不同:
1、构造方法是在new对象的时候运行,而一般的方法是在对象调用的时候才执行。
2、一个对象的建立,构造方法只执行一次,而一般方法可以被改对象调用多次。

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

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

相关文章

GO-初识包管理

初识包管理&#xff0c;知道项目中文件和文件夹之间的关系 输出&#xff0c;代码&#xff0c;在go编译器运行时会显示在屏幕中 初识数据类型 整型&#xff0c;数字。例如&#xff1a;1、2、3、4 字符串类型&#xff0c;表示文本信息的。例如:“张三”“李四” 布尔类型&#x…

windows docker

写在前面的废话 最近在学习riscv的软件相关内容&#xff0c;倒是有别人的sg2042机器可以通过ssh使用&#xff0c;但是用起来太不方便了&#xff0c;经常断掉&#xff0c;所以想着在自己的机器上跑一跑riscv的操作系统。最常见的有两种方法吧&#xff0c;第一个就是qemu&#xf…

x-zse-96,android端,伪dex加固,so加固,白盒AES,字符串加密

x-zse-96,android端,伪dex加固,so加固,白盒AES,字符串加密 上一篇某招聘软件的sig及sp参数被和谐掉了,所以懂得都懂啊! 因为web的api没有那么全,所以来看了下app的,ios的防护几乎没有,纸糊的一样,android端的有点复杂了,到最后我也没能完整的实现整个加密过程,我也只复现到DF…

探讨苹果 Vision Pro 的空间视频(术语辨析、关键技术、思考)

背景:一位资深视频技术从业者在 Pixvana 工作,积累了丰富的捕获、处理、编码、流传和播放空间媒体经验。 一、术语 空间视频:传统的 3D 视频,呈矩形,包含左右眼视图,如 iPhone15 Pro 和 Vision Pro 可录制。沉浸式视频:非矩形的环绕式视频体验,通常由两个或多个传感器…

亮数据代理IP轻松解决爬虫数据采集痛点

文章目录 一、爬虫数据采集痛点二、为什么使用代理IP可以解决&#xff1f;2.1 爬虫和代理IP的关系2.2 使用代理IP的好处 三、亮数据代理IP的优势3.1 IP种类丰富3.1.1 动态住宅代理IP3.1.2 静态住宅代理IP3.1.3 机房代理IP3.1.4 移动代理IP 3.2 高质量IP全球覆盖3.3 超级代理服务…

​《个人信息出境标准合同办法》第四条中的100万、10万、1万是指人数还是个人信息的条数?​

《个人信息出境标准合同办法》第四条中的100万、10万、1万是指人数还是个人信息的条数&#xff1f; 本条中的3个数字均指的是人数&#xff0c;不是条数。举个极端的例子&#xff0c;从目前的规定来说&#xff0c;如果某企业的国内用户人数超过了100万&#xff0c;即便向境外接收…

由浅到深认识Java语言(11):封装

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

容器中的大模型(三)| 利用大语言模型:容器化高效地部署 PDF 解析器实践...

作者&#xff1a;宋文欣&#xff0c;智领云科技联合创始人兼CTO 01 简介 大语言模型&#xff08;LLMs&#xff09;正逐渐成为人工智能领域的一颗璀璨明星&#xff0c;它们的强大之处在于能够理解和生成自然语言&#xff0c;为各种应用提供了无限可能。为了让这些模型更好地服务…

Android 10.0 app获取当前已连接wifi列表ssid和密码功能实现

1.前言 在10.0的系统定制化开发中,在一些关于wifi的定制中,有产品需求app中要求获取当前连接wifi和密码功能,在系统原生wifi中 是禁止获取wifi连接的密码的,所以就需要对wifi模块进行一部分的修改,来满足app中获取wifi的ssid和密码功能,接下来就来 实现这个功能 如图:…

idea 开发serlvet篮球秩序册管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发

一、源码特点 idea开发 java servlet 篮球秩序册管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 servlet 篮…

【MySQL】数据库的基础概念

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习计网、mysql和算法 ✈️专栏&#xff1a;MySQL学习 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…

流畅的 Python 第二版(GPT 重译)(一)

前言 计划是这样的&#xff1a;当有人使用你不理解的特性时&#xff0c;直接开枪打死他们。这比学习新东西要容易得多&#xff0c;不久之后&#xff0c;活下来的程序员只会用一个容易理解的、微小的 Python 0.9.6 子集来编写代码 。 Tim Peters&#xff0c;传奇的核心开发者&am…

Expert Prompting-引导LLM成为杰出专家

ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 如果适当设计提示&#xff0c;对齐的大型语言模型&#xff08;LLM&#xff09;的回答质量可以显著提高。在本文中&#xff0c;我们提出了ExpertPrompting&#xff0c;以激发LLM作为杰出专家回…

OpenGL+QT实现矢量和影像的叠加绘制

一、QT下OpenGL框架的初始化 OpenGL的介绍我在这里就没有必要介绍了&#xff0c;那OpenGL和QT的结合在这里就有必要先介绍一下&#xff0c;也就是怎么使用QT下的OpenGL框架。要想使用QT下的OpenGL框架&#xff0c;就必须要子类化QGLWidget&#xff0c;然后实现。 void initia…

【算法训练营】STL算法 Stack 栈的压入、弹出序列+最小栈

Stack刷题 1.最小栈2.栈的压入、弹出序列 1.最小栈 题目链接: 最小栈 题目描述 解决思路 创建一个辅助栈 只保存最小的元素 代码 class MinStack { public:MinStack() {}void push(int val) {// 只要是压栈&#xff0c;先将元素保存到_elem中_stack.push(val);//然后判断…

Unicode转码 [ASIS 2019]Unicorn shop1

打开题目 我们买最贵的试试看&#xff0c;结果提示只能输入一个字符 抓包分析一下看看 从中可以发现源代码是如何处理price的 使用的是unicodedata.numeric() 但是我们查看页面源代码&#xff0c;发现页面的编码是utf-8编码 所以&#xff0c;前端html使用的是utf-8&#xff0…

npm ERR! code ELIFECYCLE 解决办法

npm ERR! code ELIFECYCLE 解决办法 问题分析可能原因解决方法 问题 使用Vue脚手架构建项目的时候出现npm ERR! code ELIFECYCLE 分析可能原因 vue-cli-service 并没有加入到环境变量里 解决方法 ./node_modules/.bin/vue-cli-service serve

Go语言超全详解(入门级)

文章目录 1. Go语言的出现2. go版本的hello world3. 数据类型3.0 定义变量3.0.1 如果变量没有初始化3.0.2 如果变量没有指定类型3.0.3 :符号3.0.4 多变量声明3.0.5 匿名变量3.0.6 变量作用域 3.1 基本类型3.2 指针3.2.1 指针声明和初始化3.2.2 空指针 3.3 数组3.3.1 声明数组3.…

IDEA插件MyBatisCodeHelper-Pro的破解与使用

下载链接: https://pan.baidu.com/s/1M9818XstvQNeZPJACrhXcw 提取码: gs83 举例&#xff1a;IDEA 2023.3激活&#xff0c;setting->plugin->右上角齿轮&#xff08;设置&#xff09;->Install plugin from disk->选择上面下载的 MybatisCodeHelperNew-3.2.2.zip&…

『Python爬虫』极简入门

本文简介 点赞 收藏 关注 学会了 声明&#xff1a;请勿使用爬虫技术获取公民隐私数据、数据以及企业或个人不允许你获取的数据。 本文介绍如何使用 Python 写一只简单的爬虫&#xff0c;作为入门篇&#xff0c;这个程序不会很复杂&#xff0c;但至少可以讲明爬虫是个什么东…