2024年任亮java基础2

任亮java基础2文章目录 227 重载介绍 228 重载快速入门 229 重载使用细节 230 重载课堂练习 1 231 232 重载课堂练习 2 3 233 可变参数使用 233 1 基本概念任亮 java 基础 2 233 2 基本语法 233 3 快速入门案例 234 可变参数细节 235 可变参数练习 236 作用域基本使用 237 作用域使用细节 1 238 作用域使用细节 2 239

大家好,我是讯享网,很高兴认识大家。



文章目录

  • 227. 重载介绍
  • 228. 重载快速入门
  • 229. 重载使用细节
  • 230. 重载课堂练习1
  • 231. 232. 重载课堂练习2,3
  • 233. 可变参数使用
    • 233.1 基本概念任亮java基础2
    • 233.2 基本语法
    • 233.3 快速入门案例
  • 234. 可变参数细节
  • 235. 可变参数练习
  • 236. 作用域基本使用
  • 237. 作用域使用细节1
  • 238. 作用域使用细节2
  • 239. 构造器基本介绍
  • 240. 构造器快速入门
  • 241. 构造器使用细节1
  • 242. 构造器使用细节2
  • 243. 构造器课堂练习
  • 244. 对象创建的流程分析
  • 245. 引出this
  • 246. this入门
  • 247. this本质
  • 248. this小结
  • 249. this使用细节
  • 250. this课堂练习
  • 251. 252. 本章作业1,2
  • 254. 255. 256. 本章作业4,5,6
  • 257. 本章作业7
  • 258. 本章作业8
  • 259. 本章作业9
  • 260. 本章作业10
  • 261. 本章作业11

227. 重载介绍

方法重载(OverLoad)
java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致!
比如:System.out.println(); out 是 PrintStream 类型

重载的好处

  1. 减轻了起名的麻烦
  2. 减轻了记名的麻烦

228. 重载快速入门

案例:类:MyCalculator 方法:calculate

  1. calculate(int n1, int n2) //两个整数的和
  2. calculate(int n1, double n2) //一个整数,一个 double 的和
  3. calculate(double n2, int n1)//一个 double ,一个 Int 和
  4. calculate(int n1, int n2,int n3)//三个 int 的和
 
讯享网 

运行结果:
calculate(int n1, int n2) 被调用
3
calculate(double n1, int n2) 被调用…
3.1
3.1

229. 重载使用细节

230. 重载课堂练习1


f方法名和参数完全相同,虽然返回值不同,但是这不是重载,这是方法的重复定义。

231. 232. 重载课堂练习2,3

讯享网

运行结果:
平方=100
相乘=200
嗯嘛啊
24
21.4
30.0

233. 可变参数使用

233.1 基本概念

java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。
就可以通过可变参数实现

233.2 基本语法

233.3 快速入门案例

 

运行结果:
接收的参数个数:3
106
接收的参数个数:2
20

234. 可变参数细节


讯享网

运行结果:
接收的参数个数:3
6
测试接收的参数个数:3
6
测试接收的参数个数:2
101
【注】我这里用重载sum方法测试的,实际上写新方法也行。

235. 可变参数练习

 

运行结果:
milan 有 2门课的成绩总分为=170.1
terry 有 5门课的成绩总分为=280.6

236. 作用域基本使用

 

237. 作用域使用细节1




238. 作用域使用细节2



239. 构造器基本介绍

我们来看一个需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就直接指定这个对象的年龄和姓名,该怎么做? 这时就可以使用构造器。
基本语法
[修饰符] 方法名(形参列表){
方法体;
}

  1. 构造器的修饰符可以默认, 也可以是 public protected private
  2. 构造器没有返回值
  3. 方法名 和类名字必须一样
  4. 参数列表 和 成员方法一样的规则
  5. 构造器的调用, 由系统完成

构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。它有几个特点:

  1. 方法名和类名相同
  2. 没有返回值
  3. 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化

240. 构造器快速入门

现在我们就用构造方法来完成刚才提出的问题:在创建人类的对象时,就直接指定这个对象的年龄和姓名。

 

运行结果:
构造器被调用~~ 完成对象的属性初始化
p1 的信息如下
p1 对象 name=田所浩二
p1 对象 age=

241. 构造器使用细节1


【注】构造器执行的时候,对象已经创建了,它只是为了完成对象的初始化。

 

运行结果:

构造器被调用~~ 完成对象的属性初始化
p1 的信息如下
p1 对象 name=田所浩二
p1 对象 age=
p2 的信息如下
p2 对象 name=德川
p2 对象 age=0

242. 构造器使用细节2

 

先编译,然后反编译查看默认构造器:
D:0JavaProject> javap Dog.class
Compiled from “TestUse.java”
class Dog {
Dog();
}

243. 构造器课堂练习

在前面定义的 Person 类中添加两个构造器:
第一个无参构造器:利用构造器设置所有人的 age 属性初始值都为 18
第二个带 pName 和 pAge 两个参数的构造器:使得每次创建 Person 对象的同时初始化对象的 age 属性值和 name 属性值。分别使用不同的构造器,创建对象.

 

运行结果:
p1 的信息如下
p1 对象 name=田所浩二
p1 对象 age=
p2 的信息如下
p2 对象 name=null
p2 对象 age=18

244. 对象创建的流程分析


加载Person类信息,在堆中分配空间:

构造器调用后


245. 引出this

先看一段代码,并分析问题


246. this入门

247. this本质



jvm中的虚拟机地址不是实际地址,可以打印hashCode查看对象的虚拟“地址”

  1. JVM的逻辑地址:VM的逻辑地址其实是指对象在JVM中的引用地址,或者说是对象在Java堆内存中的位置。这个地址是逻辑上的,意味着它是由JVM管理和使用的,对于Java程序来说,这个地址是看不到的,程序员通过引用来操作对象。
  2. hashCode:hashCode是Java中每个对象都可以有的一个整数值,它是通过调用对象的hashCode()方法获得的。这个值主要用于散列数据结构,比如HashMap,帮助快速定位和检索对象。需要注意的是,hashCode并不是内存地址,也不保证唯一性,它只是一个为了优化搜索和排序过程的计算结果。在Java中,每个对象都可以通过调用它的 hashCode() 方法来获取一个整数,这个整数可以被视为该对象的一个简单的数字标识。它通常用于快速检查对象的等同性,尤其是在哈希表(如 HashMap 或 HashSet)中存储对象时。hashCode 的计算方法依赖于对象的类型和内容,但它并不代表对象的内存地址。
  3. 物理地址:物理地址是计算机内存中的实际地址,这个地址指的是RAM(随机存取存储器)中的具体位置。对于Java程序员来说,这部分是完全透明的,由JVM和操作系统共同管理。Java程序中不可能直接访问物理地址。

总结一下,当你在Java中操作对象时,你用的是引用(可以视作JVM的逻辑地址),而对象的快速检索可能会用到hashCode,至于物理地址,那是在JVM之下由操作系统处理的,普通Java开发者无需也无法接触到。这样的设计抽象了底层的复杂性,让Java程序更容易编写和移植。



dog1对象和this输出的hashCode一致

248. this小结

this小结:简单的说,哪个对象调用,this就代表哪个对象。

249. this使用细节

  1. this 关键字可以用来访问本类的属性、方法、构造器
  2. this 用于区分当前类的属性和局部变量
  3. 访问成员方法的语法:this.方法名(参数列表);
  4. 访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一条语句)
  5. this 不能在类定义的外部使用,只能在类定义的方法中使用
 

运行结果:
T(String name, int age)构造器
T()构造器
f2() 方法…
f1() 方法…
f1() 方法…

name是按就近原则找的,先找局部变量,找不到再找类的全局变量,this可以直接指定该对象的属性。

250. this课堂练习

定义 Person 类,里面有 name、age 属性,并提供 compareTo 比较方法,用于判断是否和另一个人相等,提供测试类 TestPerson(懒得改了,用TestUse类了)用于测试, 名字和年龄完全一样,就返回 true, 否则返回 false

 

251. 252. 本章作业1,2

 

运行结果:
2.3
输入有误或数组arr为空
输入有误或数组arr为空
2
输入有误或字符数组为空
输入有误或字符数组为空
1的价格:120.0
1的价格:100.0
2的价格:152.0
2的价格:150.0
3的价格:20.0
3的价格:20.0

254. 255. 256. 本章作业4,5,6

 

运行结果:
1 2 3
2 3
周长为:3.9793
面积为:0.74483
和=6.0
差=2.0
乘=8.0
除=2.0
和=4.0
差=4.0
乘=0.0
除数不能为0

257. 本章作业7


7)代码:

 

运行结果:
名字:丁真
颜色:雪豹色
年龄:5
8)
new Test()匿名对象

匿名对象的特点是只能用一次

【问题】用通俗的语言简述Java的匿名对象,及其如何分布在堆栈中的内存空间中
【GPT问答】Java 中的匿名对象是没有显式名称的对象。在编程过程中,我们通常为对象创建一个引用名(或者说变量名),这样我们就可以在后续的代码中多次使用这个对象。但有时候,为了某些只需临时使用一次的对象,我们可能会选择创建匿名对象。
什么是匿名对象?
举个简单的例子,如果我们通常创建一个按钮并给它添加一个点击监听器,可能会这样写:

 

在这个例子中,OnClickListener 是一个接口,我们通常需要创建一个实现了这个接口的对象来处理点击事件。这里的 new OnClickListener() 创建了一个匿名类的对象,因为它没有被赋予一个具体的引用名。
匿名对象的内存分布
在 Java 中,内存主要分为两个部分:堆(Heap)和栈(Stack)。
: 这是用来存储所有创建的对象和它们的数据(属性)的地方,不管对象是否命名。匿名对象也是在堆上分配的。
: 这部分内存用来存储局部变量和方法调用的信息。局部变量可以包括指向堆中对象的引用。
当你创建一个匿名对象时,如 new OnClickListener(),实际上它在堆上分配了内存空间用来存储这个对象的状态和信息。但是,因为它是匿名的,你没有一个变量在栈上指向它。这意味着一旦这个匿名对象不被其他对象或方法引用,它就可以被垃圾回收机制回收了。
使用场景
匿名对象适用于那些只需要一次使用的场合。使用匿名对象可以让代码更简洁,但也需要注意,过度使用匿名对象可能会使代码的可读性降低,尤其是在匿名对象非常复杂的情况下。
总的来说,匿名对象是 Java 中一个非常有用的特性,可以用来快速创建对象而无需关心对象命名,同时它们如同其他对象一样占据堆内存,但在栈上没有对应的引用变量。

综上所述,输出结果是
10
9
10
后++是先执行(也就是题中代码的先输出)后自增

258. 本章作业8

9)代码:

 

运行结果:
音乐只因你太美正在播放中,时长为2.5秒
音乐只因你太美 播放时间为2.5秒
10)d2和d1指向同一个对象,d2.m()指向,int j=i++,先赋值后自增,即j为100,i为101,后面输出100 101,然后输出d1.i和d2.i都是101,所以输出结果是:
101
100
101
101

259. 本章作业9


11)如答案
12)代码

 

260. 本章作业10

 

运行结果:
Radius Area
1 3.9793
2 12.9172
3 28.8138
4 50.669
5 78.483

261. 本章作业11


                    
小讯
上一篇 2025-01-02 15:28
下一篇 2024-12-26 12:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/3260.html