首页 > 编程语言 >Java学习笔记——第七天

Java学习笔记——第七天

时间:2024-03-06 12:23:27浏览次数:20  
标签:Java 变量 对象 成员 笔记 构造 方法 类名 第七天

面向对象编程(Object Oriented Programming,OOP)基础

面向过程编程

开发一个一个的方法,有数据要处理了,我们就调方法来处理。此时程序类似于流水线,按照代码自上而下依次运行。

面向对象编程

开发一个一个的对象来处理数据,把数据交给对象,再调用对象的方法来完成对数据的处理。程序在对象的交互中完成运行。

类与对象

什么是对象

对象就是具体的东西,一个具体的人是一个对象,一辆具体的车也是对象。

什么是类

类就是从对象中抽象出来的一类东西的总称,人这个类就是从一个个具体的人中抽象出来的。

面型对象编程的好处

符合人类的思维习惯,使编程更简单、更直观。

类的格式

public class 类名 {
    修饰符 数据类型 变量名称; //成员变量
    修饰符 返回值类型 方法名称 (...) {...}; //成员方法
    修饰符 类名 (形参列表) {...}; //构造器
    代码块
    内部类
}

成员变量

类内部定义的变量。

成员方法

类内部定义的方法。

构造器

创建对象时调用的方法,其方法名必须与类名一致。

创建对象的格式

类名 变量名 = new 类名(实参列表); //实参列表可以为空

对象怎么使用

  • 访问成员变量:
对象名.成员变量名;
  • 访问成员方法:
对象名.成员方法(...);

对象的执行原理

  1. 当创建对象时,对象的变量名会加载到栈内存中,其对应的类的代码会被加载到方法区中。

  2. 然后在堆内存中开辟一块内存空间,保存创建的对象,其中包含内部的成员变量以及一个类的地址变量,它保存类在方法区中的代码的地址。

  3. 之后栈内存中的对象变量被赋值为堆内存中对象的地址。

如何识别引用类型的变量

只要变量中存储的是对象的地址,此变量就是引用类型的变量。

类和对象的一些注意事项

  • 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car…

  • 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。

  • 成员变量本身存在默认值,默认值与动态初始化数组元素的默认值相同,同学们在定义成员变量时一般来说不需要赋初始值(没有意义)。

默认值

  • 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须是代码文件名。

  • 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。

  • 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。

  • Java存在自动垃圾回收机制,会自动清除掉垃圾对象。

this关键字

this是什么

this就是一个变量, 可以用在方法中 ,用来拿到当前对象的地址,可以访问当前对象的成员变量和成员方法;哪个对象调用方法,this就指向哪个对象,也就是拿到哪个对象。

this的的执行原理

当方法被定义好之后,Java会在编译时在方法的参数列表中增加一个this变量,这个this变量会保存该对象的地址。

this的应用场景

  • 解决对象的成员变量与方法内部变量的名称一样时,导致访问冲突问题的:
    • 用在有参构造器中。
    • 用在方法中。

构造器

构造器是什么

创建对象时会自动调用的方法,构造器可以在创建对象时实现成员变量的初始化以及其他的操作,常用于完成对象的初始化。

构造器的格式

public 类名(形参列表) {...}

构造器不需要返回值

构造器的分类

  • 无参构造器:形参列表为空。
  • 有参构造器:形参列表不为空。

构造器的特点

  • 类在设计时,如果不写构造器,Java是会为类自动生成一个无参构造器的。
  • 一旦定义了有参数构造器,Java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了。
  • 构造器也可以重载。

封装

面向对象的三大特征

  • 封装
  • 继承
  • 多态

什么是封装

就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去包装起来。

封装的设计规范

合理隐藏,合理暴露。

具体实现:

  1. 将所有成员变量隐藏起来,并同时提供setter和getter方法。
  2. 根据实际需求选择隐藏或者暴露成员方法。

如何控制对象的成员公开或隐藏

  • 公开成员:使用public进行修饰。
  • 隐藏成员:使用private进行修饰。

实体JavaBean(实体类)

实体类是什么

就是一种特殊的类,这些类与现实中的类相似,它只是一个用来保存数据的java类,可以用它创建对象,保存某个事物的数据。

实体类的要求

  1. 成员变量必须私有。
  2. 为所有成员变量提供setter和getter方法。
  3. 必须有无参数构造器。

实体类的应用场景

​ 实体类对应的是软件开发里现在比较流行的开发方式,数据和数据的业务处理相分离。数据的保存使用实体类,数据的业务处理使用操作类。

补充1:成员变量和局部变量的区别

区别 成员变量 局部变量
类中位置不同 类中,方法外 常见于方法中
初始化值不同 有默认值, 不需要初始化赋值 没有默认值,使用之前必须完成赋值
内存位置不同 堆内存 栈内存
作用域不同 整个对象 在所归属的大括号中
生命周期不同 与对象共存亡 随着方法的调用而生,随着方法的运行结束而亡

补充2:IDEA中的快捷方式

IDEA中可以按alt+insert自动生成setter、getter方法和任意参数的构造器。

标签:Java,变量,对象,成员,笔记,构造,方法,类名,第七天
From: https://www.cnblogs.com/zgg1h/p/18056260

相关文章

  • Java 中Stream接口介绍
    Java流操作Stream接口Stream接口的继承关系:BaseStream=......
  • 基于java的彩票选号系统的二次开发
    引言:在网上看到了一个较为简易的基于java的彩票选号系统,其主要通过后台生成中奖号码,用户选择并输入号码的方式进行,界面设计较为的简陋,源代码也只实现了较为基础的功能,并存在一些问题,比如用户输入错误时的逻辑问题;故而我在源代码的基础上进行了一定的界面美化和功能的补全,以下先附......
  • Java 实现全链路日志跟踪唯一ID
    Java实现全链路日志跟踪唯一ID日志痛点:使用Spring-Aop切面的时候,只能切控制层或者服务层的开始位置与结束位置的数据(也就是请求出入参),对于逻辑日志无法定位跟踪普通打印日志的时候是这样子的1.如果参数里面没有seq传递过来LOGGER.error("xxx不能为空");2.参数里面有se......
  • Java 8 Supplier函数式接口介绍及代码样例
    介绍供应商接口(SupplierInterface)是Java8引入的java.util.function包的一部分,用于在Java中实现函数式编程。它表示一个函数,该函数不接收任何参数,但会产生一个类型为T的值。T:表示结果的类型分配给Supplier类型对象的lambda表达式用于定义其get(),最终产生一个值。......
  • Rust笔记(上)
    Rust笔记(上)目录Rust笔记(上)关于为什么最终还是选择了Rust作为主力语言基本数据类型所有权与移动所有权移动注意Rc与Arc:共享所有权引用共享引用可变引用生命周期省略生命周期表达式块与分号声明if与matchiflet循环break错误处理panicResult自定义错误类型结构体泛型结构体结构体自......
  • Reference management in Java and Rust, and, how faster Rust can be?
    Hi,thisisablogcomparingthereferenceinrustandjava.IreallylovejavaandIhavespendsometimelearningtheframeworklikespringandothers.AftertakingCOMP6991,Ihavegotthisthink:Howjavamanagethereferenceinmyprogram?WhycanI......
  • 复试计网笔记
    第1章1.1计算机网络概述从组成部分上划分计算机网络主要由硬件、软件、协议三大部分组成,协议是核心。从工作方式上划分计算机网络可分为边缘部分和核心部分。边缘部分由用户主机组成,用来进行通信和资源共享。核心部分由大量网络和连接网络的路由器组成,为边缘部分提供连通......
  • java.util.Arrays 快速学习教程
    在Java中,java.util.Arrays类提供的多种数组操作功能,可以有效地执行各种数组相关的操作,使得数组处理变得简单和高效。打印数组String[]arr=newString[]{"a","b","c","d"};System.out.println(Arrays.toString(arr));//输出[a,b,c,d]Arrays.toString(arr),不过......
  • Java核心内容面试题详解
    前言随着经济的复苏,市场逐渐回暖,曾经的金三银四,金九银十也慢慢回归,在这个节骨眼上,我们要努力学习,做好知识储备,准备随时接收这泼天的offer。而我利用摸鱼(不是,是工作之余)时间也整理了一份关于Java核心知识的面试题,大家有兴趣,有需要的可以看看,希望能够给大家提供一些帮助Java基础面......
  • 关于Java并发多线程的一点思考
    写在开头在过去的2023年双11活动中,天猫的累计访问人次达到了8亿,京东超60个品牌销售破10亿,直播观看人数3.0亿人次,订单支付频率1分钟之内可达百万级峰值,这样的瞬间高并发活动,给服务端带来的冲击可想而知,就如同医院那么多医生,去看病挂号时,有时候都需要排队,对于很多时间就是金钱的场......