day4
java 创建对象--内存分析:
一个对象,调用一个方法内存图:
两个对象,调用同一方法内存图:
一个引用,作为参数传递到方法中内存图:
变量:
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型。
成员方法
-
方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。
-
将功能封装为方法的目的是,可以实现代码重用,简化代码
-
Java里的方法不能独立存在,所有的方法必须定义在类里。
方法的声明格式
修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ….){
方法体程序代码
return 返回值;
}
修饰符:public,缺省,private, protected等
返回值类型:
-
没有返回值:void。
-
有返回值,声明出返回值的类型。与方法体中“return返回值”搭配使用
方法名:属于标识符,命名时遵循标识符命名规则和规范,“见名知意” ,最好以动词开头
形参列表:可以包含零个,一个或多个参数。多个参数时,中间用“,”隔开
返回值:方法在执行完毕后返还给调用它的程序的数据。
对象.方法名()
-
方法被调用一次,就会执行一次
-
没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句。如果使用,仅用来结束方法。
-
定义方法时,方法的结果应该返回给调用者,交由调用者处理。
-
方法中只能调用方法或属性,不可以在方法内部定义方法。
方法重载
方法重载(overload):在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
重载的特点:
-
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。
-
调用时,根据方法参数列表的不同来区别。
可变长度的形参列表
JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。
-
JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量
public static void test(int a ,String[] books);
-
JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String…books);
特点
-
声明格式:方法名(参数的类型名 ...参数名)
-
可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
-
可变个数形参的方法与同名的方法之间,彼此构成重载
-
可变参数方法的使用与方法参数部分使用数组是一致的
-
方法的参数部分有可变形参,需要放在形参声明的最后
-
在一个方法的形参位置,最多只能声明一个可变个数形参
方法参数的传递机制
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
-
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
-
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
static关键字
在Java语言中,static表示“静态”的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块。static的主要作用在于创建独立于具体对象的域变量或者方法。在Java类中,可用static修饰属性、方法、代码块、内部类
被修饰后的成员具备以下特点
-
随着类的加载而加载
-
优先于对象存在
-
修饰的成员,被所有对象所共享
-
访问权限允许时,可不创建对象,直接被类调用
:
特点
-
类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常被声明为类方法,比如说工具方法由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
特点
-
没有对象的实例时,可以用类名.方法名()的形式访问由static修饰的类方法。
-
在static方法内部只能访问类的static修饰的属性或方法,不能访问类的非static的结构。
静态代码块
在开发中,有时需要某些代码在程序启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。
特点
-
静态代码块在类被加载的时候就运行了,而且只运行一次
-
静态代码块不能存在任何方法体中
-
静态代码块不能访问普通变量
封装概述
面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。
实现原则
-
将成员隐藏起来,若需要访问某个成员,提供公共方法对其访问。
3.2 封装步骤
-
使用
private
关键字来修饰成员变量。 -
对需要访问的成员变量,提供对应的一对
getXxx
方法 、setXxx
方法。
特点
-
隐藏一个类中不需要对外提供的实现细节;
-
使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
-
便于修改,增强代码的可维护性;
private关键字
-
private是一个权限修饰符,代表最小权限。
-
可以修饰成员变量和成员方法。
-
被private修饰后的成员变量和成员方法,只在本类中才能访问。
this的含义
-
this代表所在类的当前对象的引用(地址值),即对象自己的引用。
-
方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。
使用场景
-
可以调用类的属性、方法和构造方法
-
当在方法内需要用到调用该方法的对象时,就用this。具体的:我们可以用this来区分属性和局部变量。 比如:this.name = name;
this关键字小结
-
this关键字在普通方法里加和不加含义相同。
-
-
构造方法中,this总是指向正要初始化的对象。
-
构造方法调用构造方法可通过this(),可传参数,但必须位于首行。
-
this不能用于static方法,static中没有对象。
构造方法
构造方法,当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。
构造方法的特征
-
它具有与类相同的名称
-
它不声明返回值类型。(与声明为void不同)
-
不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
构造器的作用
-
创建对象(负责在堆中开辟确定的内存空间);
-
给对象进行初始化
语法格式
修饰符 构造方法名(参数列表){
// 方法体
}
new Person();
示例代码
public class Animal { private int legs; // 构造方法 public Animal() { legs = 4; } public void setLegs(int i) { legs = i; } public int getLegs() { return legs; } }
注意事项
-
如果你不提供构造方法,系统会给出无参数构造方法。
-
如果你提供了构造方法,系统将不再提供无参数构造方法。
-
构造方法是可以重载的,既可以定义参数,也可以不定义参数。
-
构造方法可以使用
this
关键字进行调用,语法为this()
。 -
构造器的调用只能在首行
包(package)的作用
-
包帮助管理大型软件系统:将功能相近的类划分到同一个包中。比如:MVC的设计模式
-
包可以包含类和子包,划分项目层次,便于管理
-
解决类命名冲突的问题
-
控制访问权限(包访问权限--缺省)
包的使用
注意事项
-
包对应于文件系统的目录,package语句中,用“.” 来指明包(目录)的层次;
-
包通常用小写单词标识。通常使用所在公司域名的倒置:
com.neuedu.xxx
Import
为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。
import语句告诉编译器到哪里去寻找类。
语法格式
import 包名.类名;
import 包名.类名;
注意事项
在源文件中使用import显式的导入指定包下的类或接口
声明在包的声明和类的声明之间。
如果需要导入多个类或接口,那么就并列显式多个import语句即可举例:可以使用java.util.*的方式,一次性导入util包下所有的类或接口。
如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。
如果在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的是哪个类。
如果已经导入java.a包下的类。那么如果需要使用a包的子包下的类的话,仍然需要导入。
import static组合的使用:调用指定类或接口下的静态的属性或方法
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
Java入门到入坟
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端