韩顺平0基础学Java——第11天

p234-249

又一个月了,时间过得好快啊,希望支棱起来

可变参数

public int sum(int ... nums){

}

这个nums是数组

细节:

1可变参数可以为0个,或任意个

2可变参数的实参可以为数组

3可变参数的本质就是数组

4可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后

5一个形参列表中只能有一个可变参数

练习:

第一次见return可以这样写的。

作用域

1.。Java中,主要的便利就是属性(成员变量)和局部变量、

2.。我们说的局部变量一般是指在成员方法中定义的变量

3.java中的作用于分类

全局变量:即属性,作用域为整个类体

局部变量:也就是除了属性之外,作用域为定义它的代码块中

4.全局变量可以不赋值直接用,因为有默认值,局部变量必须赋值后,才能使用(,)

所以说调用的时候,属性可以直接用,但是方法之间是独立的栈,所以不行。

作用域细节

1属性和局部变量可以重名,调用时遵循就近原则

2在同一个作用域中,不能重名

3.属性(字段)的生命周期更长,和对象一同生灭,局部变量伴随它 的代码块的执行而创建,伴随代码块的结束而销毁,即在一次方法调用的过程中。

4作用域范围不同:全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)

5.局部变量只能在本类中对应的方法调用

6修饰符不一样:全局变量可以有修饰符,但是局部不行。修饰符:public、protected、privated等等

构造方法/构造器constructor

在前文创造人类的对象的时,是先把一个对象创造好后,再给它的年龄和姓名属性赋值,如果现在要求在创建人类的对象时,就直接指定这个对象的年龄和姓名?

作用:对新对象的初始化

基本语法:

【修饰符】 方法名 (形参列表){

方法体

}

注:构造器的修饰符可以默认,没有返回值,方法名和类名必须一样,参数列表和成员方法一样的规则,构造器的调用由系统完成。

class Person{

int age;

String name;

public Person(String pName,int pAge){

System.out.println("构造器被调用,完成初始化~");

name = pName;

age = pAge;

}//构造器没有返回值,void都不写,构造器的名称和类名一致。

}

然后如何使用呢?

直接通过构造器指定名字。

Person p1 = new Person("madake",88);

注意事项:一个类可以定义多个构造器

这种情况可以选择初始化年龄+名字,或者只初始化名字了~

构造器是完成对象的初始化,不是创建对象!!构造器不能像成员方法那样调用。

如果没有定义构造器,系统会自动给类生成一个默认无参构造器,使用javap反编译。

当我们新建对象时的那个小括号,其实就是在调用那个默认的无参构造器!

Person p1 = new Person();

一旦定义了自己的构造器,默认的构造器就被覆盖了,就不能再使用默认无参构造器了。除非显式的定义一下,如Dog(){}

这相当于方法重载了?

练习

对象创建的流程分析

流程分析:0244_韩顺平Java_对象创建流程详解_哔哩哔哩_bilibili

1.在方法区加载Person类,只会加载一次。

2.在堆里分配空间(地址),并赋默认值。即age=0,name=null

3.显式初始化:给age变成90,name不动

4.执行构造器初始化,再进行属性的赋值→把age变成20,把name指向常量池的"小倩"

5.再把p指向堆里的空间

实际上,真正的对象在堆里面,p只是对象的引用(名字)

关键字:this

如果构造器的形参,能够直接写成属性名,就更好了。比如:

实际上,传进来的name和age变成null和0了。根据变量的作用域原则,就近,构造器的name就是局部变量了,而不是属性(字段)了。ai的解释:

this:java虚拟机会给每个对象分配this,代表当前对象。(py的self?)

老王:我的眼睛。

小美:我的眼睛。

虽然都是我的,但是指向的是两个不同的眼睛。

this的本质

this关键字的理解:指向了自己。

每一个对象都是有this的

this指向当前对象在内存中的地址。当一个对象被创建时,Java运行时环境会为这个对象分配内存,并使用this来引用这个内存地址。

使用hashCode方法可以找到对象的(虚拟)地址。比如:System.out.println(dog1.hashCode);

简单的说,哪个对象调用,this就属于哪个对象。

相关推荐
LNTON羚通29 分钟前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
哭泣的眼泪4082 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
清炒孔心菜2 小时前
每日一题 LCR 078. 合并 K 个升序链表
leetcode
Microsoft Word3 小时前
c++基础语法
开发语言·c++·算法
天才在此3 小时前
汽车加油行驶问题-动态规划算法(已在洛谷AC)
算法·动态规划
莫叫石榴姐4 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
茶猫_5 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
Hera_Yc.H6 小时前
数据结构之一:复杂度
数据结构
肥猪猪爸7 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
linux_carlos7 小时前
环形缓冲区
数据结构