韩顺平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就属于哪个对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/16350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

显示管理器sddm和lightdm有什么不同

显示管理器(Display Manager)是Linux操作系统中用于管理图形会话的组件,负责显示登录界面并启动用户会话。SDDM(Simple Desktop Display Manager)和LightDM是两种流行的显示管理器,它们各自有不同的特点和用…

Golang | Leetcode Golang题解之第113题路径总和II

题目: 题解: type pair struct {node *TreeNodeleft int }func pathSum(root *TreeNode, targetSum int) (ans [][]int) {if root nil {return}parent : map[*TreeNode]*TreeNode{}getPath : func(node *TreeNode) (path []int) {for ; node ! nil; no…

冯喜运:5.27黄金暴跌大阴后出现“暂定符”今日黄金原油操作策略

【黄金消息面分析】:金价虽然有大阴线暴跌,但依然属于超买后的调整而非熊市,对中长线投资者来说只是市场洗牌。因此,在出现企稳迹象之后,随时关注反弹时机的启动。未来几日,黄金空头可能在进一步发力之前需…

【数据结构与算法 经典例题】相交链表

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:数据结构与算法刷题系列(C语言) 期待您的关注 目录 一、问题描述 二、解题思路 方法一:双循环对比法 方…

5.26作业

服务器 2 3 #define BUFSIZE 10244 #define login_msg_len 205 6 typedef struct Node{7 char name[login_msg_len];8 struct sockaddr_in addr;9 struct Node *next;10 }Node;11 12 typedef struct Msgtype{13 char type;14 char username[login_msg_len]…

LangChain llamaindex

LangChain 参考: 全流程 | Windows 系统本地部署开源模型阿里通义千问 QWEN 1.5,结合 LangChain-Chatchat 框架和向量数据库 FAISS、Milvus - 知乎

redis数据操作相关命令

1.list操作 1.1 rpush rpush:新的元素添加到list最右边 #从右边依次往List添加1,2,3 RPUSH name 1 RPUSH name 2 RPUSH name 3#查看列表:返回 1,2,3 LRANGE name 0 -1结果如下: 1.2 lpush lpush:新加的元素在list最左边 #从…

ElasticSearch学习篇12_《检索技术核心20讲》基础篇

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243 课程分为基础篇、进阶篇、系统案例篇 主要记录企业课程学习过程课程大纲关键点,以文档形式记录笔记。 内容 检索技术:它是更底层的通用技术&#xff0c…

202009青少年软件编程(Python)等级考试试卷(四级)

第1题:【 单选题】 关于计算圆面积的匿名函数的定义,以下哪一个语法格式是正确的?( ) A:lambda r:3.1415926rr B:result=lambda r:3.1415926rr C:lambda r,3.1415926rr D:result=lambda r,3.1415926rr 【正确答案】: B 【试题解析】 : 关键字lambda表示匿名函数,冒…

GVM: Golang多版本管理利器

本文介绍了 Go Version Manager 的功能和使用方法,介绍了如何通过 GVM 在系统上安装和管理多个 Go 语言版本。原文: GVM: Go Version Manager, for Golang manage multiple versions Go 版本管理器(GVM,Go Version Manager)是一款…

速盾:为啥要进行DDoS 压力测试?

DDoS(分布式拒绝服务)压力测试是一种网络安全测试方法,用于评估一个网络系统的抗DDoS攻击能力。在DDoS攻击中,攻击者会通过多台计算机发起大量的请求,使目标服务器过载,导致正常用户无法访问网站或服务。通…

webdriver.Chrome() 和 webdriver.Chrome(options=options)的区别

文章目录 1.前言2.区别分析 1.前言 在使用selenium的时候接触到了webdriver.chrome(optionsoptions)不是很明白之间的区别,所以就了解一下。 2.区别分析 webdriver.Chrome() 和 webdriver.Chrome(optionsoptions) 是在使用 Selenium 库控制 Chrome 浏览器时的两种…

探索未来直播新纪元:Voodoo Spatial 的3D 直播革命

在这个数字化时代,随着技术的不断进步,我们正见证着娱乐与社交方式的深刻变革。今天,让我们深入了解一款颠覆传统直播模式的创新应用——Voodoo Spatial,它是如何利用尖端技术,特别是针对苹果的Vision Pro设备和最新的iPhone 15 Pro系列,重新定义了直播的边界,带领我们迈…

Django框架css文件能正常加载,但是css样式不生效

最近运行一个Django项目,能正常启动运行,css文件也能够正常加载,但是css样式却没有正常渲染。 解决办法: 1、打开注册表:winR 2、找到:计算机\HKEY_CLASSES_ROOT\.css 修改:Content Type 值&…

Vue 之 vue-router 路由嵌套不显示问题

​ 本来想用嵌套路由弄个管理员平台的,结果一直不显示。 需求: 访问 /admin 显示Welcme.vue组件 访问/admin/product显示Product.vue组件 import { createRouter, createWebHistory } from "vue-router";import Home from "/views/Lay…

llamaindex rag agent 检索文档进行分析

两个 pdf 分别是两个电商公司的财报之类的,像分析这两家公司的盈利情况,利用 llamaindex 的 rag 检索盈利的部分,来对比 使用 tongyi,如果指定,默认是 openai 了 # 加载电商财报数据 from llama_index.core import S…

C++ | Leetcode C++题解之第113题路径总和II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> ret;unordered_map<TreeNode*, TreeNode*> parent;void getPath(TreeNode* node) {vector<int> tmp;while (node ! nullptr) {tmp.emplace_back(node->val);node …

mysql中单表查询方法

大家好。我们知道&#xff0c;mysql有一个查询优化器的模块。当我们用sql语句查询表中记录时&#xff0c;会对这条查询语句进行语法解析&#xff0c;然后就会交给查询优化器来进行优化&#xff0c;优化后生成一个执行计划&#xff0c;这个执行计划表明了应该使用哪些索引进行查…

Android 10.0 锁屏页面弹窗功能实现

1.前言 在10.0的系统rom产品定制化开发中,在定制化开发中,需要在锁屏页面弹窗功能,当收到某些信息的时候,需要添加 悬浮窗锁屏页面也同样需要弹窗功能,接下来就分析下相关功能,然后实现功能 2.锁屏页面弹窗功能实现的核心类 frameworks\base\core\java\android\view\Wi…

用c++用4个凸函数(觉得啥好用用啥)去测试adam,rmsprop,adagrad算法的性能(谁先找到最优点)

为了测试 Adam、RMSProp 和 Adagrad 算法的性能&#xff0c;你可以使用四个凸函数进行实验。以下是一些常用的凸函数示例&#xff1a; Rosenbrock 函数&#xff1a; Booth 函数&#xff1a; Himmelblau 函数&#xff1a; Beale 函数&#xff1a; 你可以选择其中一个或多…