Java学习之--类和对象
💕粗缯大布裹生涯,腹有诗书气自华💕
作者:Mylvzi
文章主要内容:Java学习之--类和对象
类和对象
类的实例化:
1.什么叫做类的实例化
利用类创建一个具体的对象就叫做类的实例化!
当我们创建了一个类,实际上就是创建了一个“自定义类型”(和C语言中的结构体类似),是一种新的类型。既然是类型,就和Int,char一样可以进行变量的创建。创建的变量是一种引用变量,变量内部存储的是创建对象的地址!
2.注意事项
1.类类似于结构体,是一种自定义类型,通过.操作符访问成员变量
2.类可以创建多个对象,比如此处还可以创建stu2,stu3.......
3.类:理解为图纸,不占用物理地址;但是通过图纸创建出房子的时候,房子(对象)占用物理地址。
this的引用
先来看两个问题:
正确代码:
// 创建一个学生类
class Stu{public String name;public String sex;public int age;// 所有对成员变量进行操作的地方都要添加this,代表是当前对象调用的方法!!!// this写在方法内部public void setStu(String name,String sex,int age) {this.name = name;this.sex = sex;this.age = age;}public void printStu() {System.out.println(this.name+" "+this.sex+" "+this.age);}
}public class Test2 {public static void main(String[] args) {// 实例化一个stu1的对象Stu stu1 = new Stu();Stu stu2 = new Stu();Stu stu3 = new Stu();stu1.setStu("lvzi","nv",18);stu2.setStu("biandu","nan",19);stu3.setStu("栀子","nv",20);stu1.printStu();stu2.printStu();stu3.printStu();}
}
1.定义:
this引用的作用就是告诉编译器我当前我调用的是哪个对象,对当前对象的成员变量进行操作!!!避免了很多可能出现的错误
2.注意事项:
1.this只能在成员方法内部使用。
2.this只能调用当前对象,不能再调用另一个对象
3.实际上,成员方法内部其实是有“对象”这个参数的,只不过一般被省略!!!
4.this是Java中的一个关键字,表示对象的引用
对象的构造和初始化
1.局部变量和成员变量的初始化
同时,如果我们想要对成员变量进行初始化,需要调用成员方法:
可是如果每次都需要调用方法来初始化对象是否过于麻烦?有没有其他方法可以初始化对象呢?答案是可以的,接下来就讲解初始化对象的一种特殊方法-->构造方法!!!
2.构造方法:
是一种用来初始化对象的特殊方法
注意事项 :
1.不需要写返回值
2.只负责初始化对象,并不负责给对象开辟空间
3.方法名必须和类名相同!!!
4.创建完对象,编译器会自动进入到构造方法内部(代码演示)
4.构造方法之间也可以构成重载 (带参数的构造方法和不带参数的构造方法之间构成重载)
// 带参数的构造方法public Stu(String name,String sex,int age) {this.name = name;this.sex= sex;this.age = age;}// 利用带参数构造方法,只需在创建对象时传入参数即可// 编译器会进入到构造方法,帮助你初始化成员对象Stu stu1 = new Stu("绿子","女",18);stu1.printStu();
5.如果用户没有定义构造方法,编译器会自动创建一个无参的构造方法,这个默认的构造方法也可以初始化成员变量,只不过是利用默认值进行初始化的(解释了为什么字段可以不初始化也能通过编译)
6.如果本身就存在带参数的构造方法,编译器并不会自动创建一个构造方法!所以,在有带参数的构造方法时,实际参数必须传参!!!
7.通过this调用其他构造方法(简化初始化代码)
注意:
1.this必须写在第一行!!!不是第一行就无法通过编译
2.不能呈环!!!
3.绝大多数情况下构造方法使用public来修饰,特殊情况下使用private修饰
4.this是一种引用,哪个对象调用,就引用哪个对象,this此时就是一种引用数据类型,存储的是指向对象的地址!!!
8.快速创建构造方法 (常用)
总结:所谓的构造方法就是一种用来初始化对象的特殊方法!!!方法名必须和类名相同,通过带参数的构造方法可以快速进行对象的初始化!!!
3.默认初始化:
上文已经提到过,成员变量不初始化也可以以通过编译,并有默认值,主要是因为编译器提供了一个默认的构造方法,在对象创建时就会被调用。实际上,通过new关键字来实例化对象要做的工作很多!
4.就地初始化(在创建成员变量时就直接赋值)
// 就地初始化(写死了)public String name = "绿子";public String sex = "girl";public int age = 18;
封装:
1.引入:
我们见到的电脑主机往往都被一层黑壳包住,我们只需要通过主机上的接口来实现和计算机之间的交互。但实际上,主机内部有着复杂的电子元件,来实现特定的功能!但我们并不关心他内部的属性,以及如何运转的,我们只需要通过接口来实现交互,这种将属性和内部方法(实现细节)隐藏的做法就是封装!
2.访问修饰限定符:
在计算机中,通过类来存储属性和方法!那如何实现封装呢?通过访问修饰限定符来实现!
public:公开,可跨包,跨类
protected: 不能跨包
default:默认权限,不可跨包
private:只能在同一包同一类使用
public class Stu2 {// 访问修饰限定符private int age;String sex;public String name;public Stu2(int age,String sex,String name) {this.age = age;this.name = name;this.sex = sex;}public void stuRun() {System.out.println(this.name+"i am running!");}public void stuSleep() {System.out.println(this.name + "i am sleeping!");}public static void main2(String[] args) {Stu2 stu = new Stu2(14,"男","边度");System.out.println(stu.age);// private 只能在Stu2类中访问System.out.println(stu.sex);// default 默认权限,可以在当前包中任意类访问System.out.println(stu.name);// public 公开权限,可跨包访问stu.stuRun();stu.stuSleep();}
}
private:无法跨类访问
一般情况下,成员变量设置为private,方法设置为public
那如果我想在类外使用private属性的成员变量该怎么办呢?答案是:使用set和get方法(方法被设置为公开的,无法访问成员变量,但可以访问方法,通过方法来访问成员变量)
3.set和get方法的创建
快速创建set和get方法的步骤:
包:
引入:
上文提到default无法跨包访问,那什么是包呢?包就是类的集合,是用来管理类的!可以把包理解为一个大的文件夹,里面存放的是各种类,通过包可以很好的组织,管理类!比如当你不想当前包的类被其他包访问,就可以修饰为default;包还有一个重要的作用,在同一个工程内,可以出现两个相同名字的类,只要处于不同的包中。(在两个文件夹内都有“周杰伦歌曲”这个类,电脑也不会报错)
1.导入包中的类
其实Java中提供了很多的现成的类供我们使用,比如常见的util类,Arrays类等等;在使用这些类时,要进行相应的导入,导入是通过import
如果需要使用 java.util 中的其他类, 可以使用 import java.util.*
import java.util.*;
import java.sql.*;Date date = new Date();// err// 如果存在访问冲突,要写具体,是哪个包中的类
java.util.Date date = new java.util.Date();
2.使用static导入静态包
import static java.lang.Math.*;public static void main(String[] args) {double x= 2.0;double y = 3.0;System.out.println((Math.pow(x, 2) + Math.pow(y, 2)));// 13.0// 添加static关键字,可以直接使用方法名,不需要再添加Math了,这样写更方便,但不建议用System.out.println(pow(x, 2) + pow(y, 2));}
注意:
import和C语言中的include不一样,include是导入文件,import是导入相应的类,使用相应的方法!!!同时,include包括所有函数的具体实现方法,Import只是导入接口的声明,并不包括具体的实现细节;include加头文件是在预处理阶段就进行的,而import是在编译阶段进行
3.创建自定义包:
4.通过自定义包再次深入理解访问修饰限定符的权限:
常见的包:
1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
2. java.lang.reflect:java 反射编程包;
3. java.net:进行网络编程开发包。
4. java.sql:进行数据库开发的支持包。
5. java.util:是java提供的工具程序包。(集合类等) 非常重要
6. java.io:I/O编程开发包。
在编译器中快速查看常见包:双击shift
静态成员(类成员)
1.定义:
所有对象共享的成员变量就叫做静态成员变量!通过static关键字修饰。静态成员变量不属于对象,而是属于类!推荐通过类来访问静态成员变量!
class Stu{// 实例成员变量-->每个对象都包含一份int age;String name;String sex;// 假如三位学生都是一个班的,现在要创建一个classroom的成员变量// 由于他们都是一个班的,可以说他们共享一个“classroom”// 共享的成员变量就是静态成员变量public static String classroom = "110";public Stu(int age, String name, String sex) {this.age = age;this.name = name;this.sex = sex;}
}public class Test {public static void main(String[] args) {Stu stu1 = new Stu(15,"biandu","boy");Stu stu2 = new Stu(18,"绿子","girl");Stu stu3 = new Stu(19,"栀子","boy");// 直接通过类名访问(推荐)System.out.println(Stu.classroom);// 通过对象访问(不推荐)System.out.println(stu1.classroom);System.out.println(stu2.classroom);System.out.println(stu3.classroom);}
2.类变量不属于对象,继而他并不存在于堆区,而是存在于方法区!
3. static修饰方法
注意:
1.静态方法内部不能出现this引用,因为this引用必须指明对象,静态方法不属于对象,静态方法是类的方法!
2.不能在静态方法内部访问任何非静态成员变量!
3.在静态方法内部不能直接引用非静态方法(因为非静态方法内部都有this的引用)但可以在非静态方法内部创建一个对象,通过对象来访问非静态方法!
4.通过对象在静态方法内部调用非静态方法
5.静态成员变量的初始化
1.就地赋值(直接再初始化时就赋值)
2.通过代码块赋值-->先介绍代码块
代码块:
1.定义:
被{}围起来的代码就叫做代码块!
分类:
普通代码块
构造块
静态块
同步代码块(后续讲解多线程部分再谈)
2.普通代码块:
定义在方法内部的代码
public static void main(String[] args) {// 普通代码块{int x= 10;System.out.println(x);// 输出10}System.out.println(x);// err x只能在上面的代码块内部使用
3.实例代码块:
用来初始化实例变量的代码块
// 实例代码快-->用来初始化实例变量(不加修饰符){this.age = 12;this.sex = "女";this.name = "绿子";}Stu stu1 = new Stu();System.out.println(stu1.name);// 输出绿子
4.静态块(添加修饰符static):
用来初始化静态变量!!!
public static String classroom;static {classroom = "222202";System.out.println("hello world");}
注意:
1.静态代码块多少个对象,代码块只会被执行一次(创建对象的时候执行唯一一次)
2.代码块的优先级高于构造方法
3.如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
总结:实例代码块和静态代码块的区别
1.实例代码块只能在对象创建的时候才会被调用,而静态代码块不需要创建对象就可以直接通过类来访问
2.静态代码块只能被执行一次,而实例代码块可以被执行多次(实例化一个对象就执行一次)
对象的打印:
1.直接传递对象名会打印指向对象的地址
2.如何通过一个函数来打印所有成员变量呢?通过tosTring()
3.快速调出toString方法
总结:
1.封装是面向对象(Object Oriented program)的三大特征(封装,继承,多态),通过封装能更好的管理成员变量
2.类是面向对象重要的部分,通过将研究的事物分离出来各种类,通过类之间的交互来完成工作
3.类是对现实事物的抽象化处理,通过new关键字进行对象的实例化
4.构造方法是一种特殊的初始化成员变量的方法;掌握命名规则和如何快速创建
5.理解静态成员变量和实例变量的区别
6.代码块也是用来初始化成员变量的,其优先级很高
7.通过改写toString方法以字符串的形式打印成员变量
相关文章:
Java学习之--类和对象
💕粗缯大布裹生涯,腹有诗书气自华💕 作者:Mylvzi 文章主要内容:Java学习之--类和对象 类和对象 类的实例化: 1.什么叫做类的实例化 利用类创建一个具体的对象就叫做类的实例化! 当我们创建了…...
Unity技术手册-UGUI零基础详细教程-Canvas详解
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…...
破天荒呀!小杜微信有名额了
写在前面 小杜粉,众所周知前面加小杜微信为好友的基本都是由名额限制的。一般都是付费进入社群且进行备注,小杜才会长期保留微信好友。主要由于,添加的人数太多了,微信账号人数名额有限。因此,小杜过一段时间…...
领域驱动设计:领域模型与代码模型的一致性
文章目录 领域对象的整理从领域模型到微服务的设计领域层的领域对象应用层的领域对象 领域对象与微服务代码对象的映射典型的领域模型非典型领域模型 DDD 强调先构建领域模型然后设计微服务,以保证领域模型和微服务的一体性,因此我们不能脱离领域模型来谈…...
TypeScript命名空间和模块
🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 命名空间(Namespace) 命名空间(Namespace)使用场景 第三方库 兼容…...
C++学习笔记--函数重载(1)
文章目录 序言一、洞悉函数重载决议1.1、重载决议的基本流程1.2、Name Lookup1.2.1、Qualified Name Lookup1.2.1.1、Class Member Lookup1.2.1.2、Namespace Member Lookup 1.2.2、Unqualified Name Lookup1.2.2.1、Usual Unqualified Lookup1.2.2.2、Argument Dependant Look…...
交叉编译poco-1.9.2
目录 一、文件下载二、编译三、可能遇到的问题和解决方法3.1 error "Unknown Hardware Architecture."3.2 error Target architecture was not detected as supported by Double-Conversion一、文件下载 下载地址:poco-1.9.2 二、编译 解压目录后打开build/config/…...
C++中如何处理超长的数字(long long类型的整数都无法存储的)
C中如何处理超长的数字(long long类型的整数都无法存储的) 在 C中,如果数字超出了 long long 类型的范围,可以考虑使用字符串或第三方库(如 Boost.Multiprecision)来表示和处理超长数字。要使用第三方库需…...
RabbitMQ MQTT集群方案官方说明
RabbitMQ MQTT 官方网说明 官方地址: https://www.rabbitmq.com/mqtt.html 从3.8开始,该MQTT插件要求存在一定数量的群集节点。这意味着三分之二,五分之三,依此类推。 该插件也可以在单个节点上使用,但不支持两个节点的集群。 如…...
深圳唯创知音电子将参加IOTE 2023第二十届国际物联网展•深圳站
2023年9月20~22日,深圳唯创知音电子将在 深圳宝安国际会展中心(9号馆9B1)为您全面展示最新的芯片产品及应用方案,助力传感器行业的发展。 作为全球领先的芯片供应商之一,深圳唯创知音电子一直致力于为提供高质量、…...
《TCP/IP网络编程》阅读笔记--I/O复用
目录 1--基于I/O复用的服务器 2--select()函数 3--基于I/O复用的回声服务器端 4--send()和recv()函数的常用可选项 5--readv()和writev()函数 1--基于I/O复用的服务器 多进程服务器端具有以下缺点:当有多个客户端发起连接请求时,就会创建多个进程来…...
[C#] 允许当前应用程序通过防火墙
通常在一台装有防火墙的电脑上运行程序的场合,往往会弹出对话框提示:是否允许执行该应用程序。 我们在开发软件的时候,可以事先在软件里面设置当前软件为防火墙允许通过的软件。这样,用户在使用时就可以避开前面提到的弹框了。 在…...
帆软FineReport决策报表Tab实现方案
最近有个需求是要做首页展示,为了减少前端工作量,利用采购的帆软FineReport来实现,记录过程,方便备查。 需求 做个Tab页,实现多个页切换。 方案一、利用帆软自带切换 帆软自带的有Tab控件,可实现切换&a…...
只打印文名
CMakeLists.txt set(CMAKE_C_FLAGS "-O0 -ggdb -D__NOTDIR_FILE__$(notdir $<)") // set(CMAKE_C_FLAGS "-O0 -ggdb -D__NOTDIR_FILE__$(notdir $<) -D__FILENAME__$(subst $(dir $<),,$<)")C文件 #include <stdio.h>#ifdef __NOTDIR_…...
【经典小练习】JavaSE—拷贝文件夹
🎊专栏【Java小练习】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎄效果🌺代码🛸讲解&#x…...
FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB
FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB 仿真模块SIM_uart_drive_TB,仿真实现。 vivado联合modelsim进行仿真。 文章目录 FPGA-结合协议时序实现UART收发器(六):仿真模…...
Spring Boot集成EasyExcel实现数据导出
在本文中,我们将探讨如何使用Spring Boot集成EasyExcel库来实现数据导出功能。我们将学习如何通过EasyExcel库生成Excel文件,并实现一些高级功能,如支持列下拉和自定义单元格样式,自适应列宽、行高,动态表头 ÿ…...
EasyExcel3.0读(日期、数字或者自定义格式转换)
EasyExcel 3.0读(日期、数字或者自定义格式转换) 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version> </dependency>对象 package com.xiaobu.entity.vo;import …...
浅谈C++|STL之vector篇
一.vector的基本概念 vector是C标准库中的一种动态数组容器,提供了动态大小的数组功能,能够在运行时根据需要自动扩展和收缩。vector以连续的内存块存储元素,可以快速访问和修改任意位置的元素。 以下是vector的基本概念和特点: 动…...
微信、支付宝修改步数【小米运动】
简介 小米运动是一款流行的健身应用,可以记录用户的步数和运动数据。然而,有些用户希望能够修改步数,以达到一些特定的目的。本文将介绍一个Python脚本,可以帮助用户实现修改小米运动步数的功能。 正文 脚本介绍: 本脚本是一个Python脚本,用于修改小米运动步数。通过模…...
stu02-初识HTML
1.HTML概述 (1)HTML是Hyper Text Mark-up Language的首字母缩写。 (2)HTML是一种超文本标记语言。 (3) 超文本:指除了文字外,页面内还可以包含图片、链接、甚至音乐、视频等非文字元…...
软件测试7大误区
随着软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视。但是,国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在。因此,对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识…...
【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作
目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象(ndarray) 多维数组的属性 1、创建数组 2、数组操作 3、数组数学 4、数组广播 5、排序操作 1. np.sort() 函数 2. np.argsort() 函数 3. ndarray.sort() 方法 4. 按列或行排序 5. n…...
CSS宽度问题
一、魔法 为 DOM 设置宽度有哪些方式呢?最常用的是配置width属性,width属性在配置时,也有多种方式: widthmin-widthmax-width 通常当配置了 width 时,不会再配置min-width max-width,如果将这三者混合使…...
浅谈C++|STL之string篇
一.string的基本概念 本质 string是C风格的字符串,而string本质是一个字符串 string和char * 区别 char * 是一个指针string是一个类,类内部封装了char *,管理这个字符串,是一个char * 型容器。 特点 string类内部封装了很多成…...
Kubernetes Dashboard安装部署
Kubernetes Dashboard安装部署 1. 下载Dashboard 部署文件2. 修改yaml配置文件3. 应用安装,查看pod和svc4. 创建dashboard服务账户5. 创建admin-user用户的登录密钥6. 登录6.1 使用token登录(1) 短期token(2) token长期有效 6.2 使用 Kubeconfig 文件登录 7.安装met…...
在Qt的点云显示窗口中添加坐标轴C++
通过摸索整理了三个方法: 一、方法1://不推荐,但可以参考 1、通过pcl的compute3DCentroid()方法计算点云的中心点坐标; 函数原型如下: compute3DCentroid (const pcl::PointCloud<PointT> &cloud, Eigen…...
[密码学入门]凯撒密码(Caesar Cipher)
密码体质五元组:P,C,K,E,D P,plaintext,明文空间 C,ciphertext,密文空间 K,key,密钥空间 E,encrypt,加密算法 D,decrypt,解密算法 单表代换…...
uboot 顶层Makefile-make xxx_deconfig过程说明三
一. uboot 的 make xxx_deconfig配置 本文接上一篇文章的内容。地址如下:uboot 顶层Makefile-make xxx_deconfig过程说明二_凌肖战的博客-CSDN博客 本文继续来学习 uboot 源码在执行 make xxx_deconfig 这个配置过程中,顶层 Makefile有关的执行思路。 …...
c++中的多线程通信
信息传递 #include <iostream> #include <thread> #include <chrono> #include <mutex> #include <condition_variable> #include <queue> // 用于存储和同步数据的结构 struct Data {std::queue<std::string> messag…...
扬中热线网站/在线推广企业网站的方法
需求: 1.直接执行前端传来的任何sql语句,parameterType"String", 2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回具体的bean类型,因此设置resultType"java.util.Map",但…...
做网站先做前台还是后台/百度指数是怎么计算的
前言 在使用 python 制作网页的过程中,我们往往需要先将站点的目录“虚拟化”。虚拟化其实就是将当前文件下程序的运行环境与整个系统的环境隔离。那么为什么我们要将一个项目虚拟化呢? 1.不进行虚拟化会产生的问题 在平时使用 python 时,有可…...
阜宁网站开发/夸克搜索引擎入口
通常在项目中需要定时的去处理相关任务,这时spring管理容器的定时任务就显得方便的多了,下面是自己整理的两种配置方法: 一.使用quartz配置: ①写好需要执行任务的java类 eg: public class TestSchedueTask { pr…...
网站建设s/找文网客服联系方式
本地存根和本地伪装就是在消费方部署一个实现了目标接口的伪服务。用于在调用真正服务之前,之后的处理工作。其职能有点类似于Spring 的AOP。 为什么要使用本地存根和本地伪装 本地存根 通常情况下,我们调用接口之前都会生成一个请求对象。并且对…...
广州城市建设网站/软文广告图片
可空的引用类型(Nullable Reference Types) 可空的引用类型可概括地表述为,引用类型将不再默认可空。因此,开发人员必须使用定义可空值类型的同样语法“Type?”,显式地标记一个引用类型为可空。 如果将一个空值赋值给…...
餐饮门户网站 方案怎么做/网站排名怎么优化
上一篇讨论了链表的反转问题,这一篇讨论链表排序的问题 1. 排序两个有序链表 比较简单,属于归并排序,不再赘述 时间复杂度O(n), 空间复杂度O(1) 1 ListNode *mergeList( ListNode *list1, ListNode *list2 ) {2 if(!list1 || …...