java重载this_Java的this关键字的使用与方法的重载相关知识

Java this关键字详解

this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性。例如:

public class Demo{

public int x = 10;

public int y = 15;

public void sum(){

// 通过 this 点取成员变量

int z = this.x + this.y;

System.out.println("x + y = " + z);

}

public static void main(String[] args) {

Demo obj = new Demo();

obj.sum();

}

}

运行结果:

x + y = 25

上面的程序中,obj 是 Demo 类的一个实例,this 与 obj 等价,执行 int z = this.x + this.y;,就相当于执行 int z = obj.x + obj.y;。

注意:this 只有在类实例化后才有意义。

使用this区分同名变量

成员变量与方法内部的变量重名时,希望在方法内部调用成员变量,怎么办呢?这时候只能使用this,例如:

public class Demo{

public String name;

public int age;

public Demo(String name, int age){

this.name = name;

this.age = age;

}

public void say(){

System.out.println("网站的名字是" + name + ",已经成立了" + age + "年");

}

public static void main(String[] args) {

Demo obj = new Demo("微学苑", 3);

obj.say();

}

}

运行结果:

网站的名字是微学苑,已经成立了3年

形参的作用域是整个方法体,是局部变量。在Demo()中,形参和成员变量重名,如果不使用this,访问到的就是局部变量name和age,而不是成员变量。在 say() 中,我们没有使用 this,因为成员变量的作用域是整个实例,当然也可以加上 this:

public void say(){

System.out.println("网站的名字是" + this.name + ",已经成立了" + this.age + "年");

}

Java 默认将所有成员变量和成员方法与 this 关联在一起,因此使用 this 在某些情况下是多余的。

作为方法名来初始化对象

也就是相当于调用本类的其它构造方法,它必须作为构造方法的第一句。示例如下:

public class Demo{

public String name;

public int age;

public Demo(){

this("微学苑", 3);

}

public Demo(String name, int age){

this.name = name;

this.age = age;

}

public void say(){

System.out.println("网站的名字是" + name + ",已经成立了" + age + "年");

}

public static void main(String[] args) {

Demo obj = new Demo();

obj.say();

}

}

运行结果:

网站的名字是微学苑,已经成立了3年

值得注意的是:

在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。

不能在构造方法以外的任何方法内调用构造方法。

在一个构造方法内只能调用一个构造方法。

上述代码涉及到方法重载,即Java允许出现多个同名方法,只要参数不同就可以。后续章节会讲解。

作为参数传递

需要在某些完全分离的类中调用一个方法,并将当前对象的一个引用作为参数传递时。例如:

public class Demo{

public static void main(String[] args){

B b = new B(new A());

}

}

class A{

public A(){

new B(this).print(); // 匿名对象

}

public void print(){

System.out.println("Hello from A!");

}

}

class B{

A a;

public B(A a){

this.a = a;

}

public void print() {

a.print();

System.out.println("Hello from B!");

}

}

运行结果:

Hello from A!

Hello from B!

匿名对象就是没有名字的对象。如果对象只使用一次,就可以作为匿名对象,代码中 new B(this).print(); 等价于 ( new B(this) ).print();,先通过 new B(this) 创建一个没有名字的对象,再调用它的方法。

Java方法重载

在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同就可以,这被称为方法重载(method overloading)。

参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。

重载是面向对象的一个基本特性。

下面看一个详细的实例。

public class Demo{

// 一个普通的方法,不带参数

void test(){

System.out.println("No parameters");

}

// 重载上面的方法,并且带了一个整型参数

void test(int a){

System.out.println("a: " + a);

}

// 重载上面的方法,并且带了两个参数

void test(int a,int b){

System.out.println("a and b: " + a + " " + b);

}

// 重载上面的方法,并且带了一个双精度参数

double test(double a){

System.out.println("double a: " + a);

return a*a;

}

public static void main(String args[]){

Demo obj= new Demo();

obj.test();

obj.test(2);

obj.test(2,3);

obj.test(2.0);

}

}

运行结果:

No parameters

a: 2

a and b: 2 3

double a: 2.0

通过上面的实例,读者可以看出,重载就是在一个类中,有相同的函数名称,但形参不同的函数。重载的结果,可以让一个程序段尽量减少代码和方法的种类。

说明:

参数列表不同包括:个数不同、类型不同和顺序不同。

仅仅参数变量名称不同是不可以的。

跟成员方法一样,构造方法也可以重载。

声明为final的方法不能被重载。

声明为static的方法不能被重载,但是能够被再次声明。

方法的重载的规则:

方法名称必须相同。

参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。

方法的返回类型可以相同也可以不相同。

仅仅返回类型不同不足以成为方法的重载。

方法重载的实现:

方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错,这叫做重载分辨。

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

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

相关文章

python 类和对象 经常用吗_python基础教程之对象和类的实际运用

我们熟悉了对象和类的基本概念。我们将进一步拓展,以便能实际运用对象和类。调用类的其它信息中提到,在定义方法时,必须有self这一参数。这个参数表示某个对象。对象拥有类的所有性质,那么我们可以通过self,调用类属性…

java get properties_Java.lang.System之getProperties()方法

Environmentjava.vm.version——>25.60-b23java.vm.vendor——>Oracle Corporationjava.vendor.url——>http://java.oracle.com/idea.launcher.port——>7533java.vm.name——>Java HotSpot(TM) 64-Bit Server VMfile.encoding.pkg——>sun.iouser.country—…

mysql set语句_MySQL Prepared语句简介

之前的MySQL版本4.1,查询以文本格式发送到MySQL服务器。 之后,MySQL服务器使用文本协议将数据返回给客户端。MySQL必须完全解析查询,并将结果集转换为字符串,然后再将其返回给客户端。 文本协议具有严重的性能问题。为了解决这个问…

java resultset close_java代码ResultSet is closed

我用的Eclipse开发工具写java代码,连接的是SQLServer2000。提示ResultSetisclosed代码如下:privatestaticvoidgetDBConnection(){try{Class.forName(strName);connDriverManager.ge...我用的Eclipse开发工具写java代码,连接的是SQL Server 20…

三同轴连接器_一种毫米波频段微带同轴转换结构

在微波电路中,同轴电缆和微带线是微波系统中常见的两种微波传输线,同轴电缆以其频带宽、屏蔽性好、结构简单、可弯曲等特性,常被用作模块或系统之间连接的传输线。在高频段,微带线是混合微波集成电路(Hybrid Microwave Integrated…

java rhino 运行 js_Mozilla Rhino :如何从Java调用JS函数

小编典典String script “function abc(x,y) {return xy;}”;Context context Context.enter();try {ScriptableObject scope context.initStandardObjects();Scriptable that context.newObject(scope);Function fct context.compileFunction(scope, script, “script”,…

java getselecteditem_java – 将getSelectedItem()从JComboBox转换为int或任何其他东西

它在这里与对象一起工作得很好.import java.awt.*;import javax.swing.*;class TestCombo {public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {public void run() {Integer[] numbers {1,2,3};String[] names {"Ben", "Ji…

java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...

前言二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰。一、题目类型已知二叉树的两种遍历序列,请根据该序列构建二叉树;①根据…

nginx https透明代理_Nginx反向代理https,配置lets-encrypt证书教程

前言本站也终于迁移到https了,由于全Docker部署,迁移过程中真是艰难无比(wordpress那块被折腾的想放弃了),也欢迎访问本人博客,(知乎的排版有些乱)Nginx反向代理https,配置lets-encr…

nginx 一个请求发给多台机器_配置Nginx实现负载均衡

企业在解决高并发问题时,一般有两个方向的处理策略,软件、硬件,硬件上添加负载均衡器分发大量请求,软件上可在高并发瓶颈处:数据库web服务器两处添加解决方案,其中web服务器前面一层最常用的的添加负载方案…

怎么用记事本写java_如何用记事本写下第一个Java程序-Fun言

在刚学java的时候,刚开始并未接触类似于Myeclipse这类的编辑器,都是用记事本编写程序,这样虽然很慢,但是能让我们明白其中的原理,所以今天来教大家用记事本来写第一个java程序"Hello World!"准备…

python中list是什么类型_Python中的list数据类型

创建列表sample_list [a,1,(a,b)]Python 列表操作sample_list [a,b,0,1,3]得到列表中的某一个值value_start sample_list[0]end_value sample_list[-1]删除列表的第一个值del sample_list[0]在列表中插入一个值sample_list[0:0] [sample value]得到列表的长度list_length …

pythonhash加密_Python字符串hashlib加密模块使用案例

主要用于对字符串的加密,最常用的为MD5加密:import hashlibdef get_md5(data):obj hashlib.md5()obj.update(data.encode(utf-8))result obj.hexdigest()return resultval get_md5(123) #这里放入要加密的字符串文字。print(val)#简便的写法&#xff…

python网络爬虫资源库名_Python网络爬虫

网友NO.524767Python网络爬虫与信息提取(实例讲解)课程体系结构: 1、Requests框架:自动爬取HTML页面与自动网络请求提交 2、robots.txt:网络爬虫排除标准 3、BeautifulSoup框架:解析HTML页面 4、Re框架:正则框架,提取页…

静态成员 java_JAVA中的静态成员

//Java中的静态成员/**静态的成员变量是属于类的,不属于某个对象,是共享的。* 访问时可以用类名.静态属性直接访问,也可以用对象.访问,后者不提倡。* 静态的成员方法只能访问静态的成员*/class Point{static int age ; //所有人共用agestatic…

python骨灰技巧_Pandas技巧,某骨灰级Pythoner经验总结,呕心沥血!

原标题:Pandas技巧,某骨灰级Pythoner经验总结,呕心沥血!Python已迅速发展为数据科学家必备的编程语言。python作为一种编程语言提供了更加优秀、宽阔的生体系统与深度的科学计算库。在科学计算库中,Pandas对数据科学最…

java课外兴趣小组管理系统_课外兴趣小组活动方案

课外活动在一定程度上可以开发孩子们的兴趣和天赋,下面是学习啦小编为你整理的课外兴趣小组活动方案,希望对你有用!课外兴趣小组活动方案1一、指导思想:为致力学校内涵式发展,全面推进素质教育,促进学生的全面发展和健…

软件项目周报_有关细节、效率、周报和扯淡

1、有关细节聊聊工作中的细节。有两个视角,「下属」和「上级」。大部分人同时有这两个角色,但屁股转变就有不同看法。对于下属来说,细节是自己的事,上级管得多会很让人烦,而且觉得这个上级很无能,只会盯着细…

java修改配置文件参数_在java类中获取在.properties配置文件中设置的参数

如何获取.properties配置文件中的参数,我在网上查了半天没弄明白,后来在以前的项目中找到了,就写下来,避免遗忘。1.配置文件:message_product.propertiestotal_product2service11,新股发行短信提醒服务,发行的详细信息…

ps发光插件_PS插件自定义区域发光真实辉光插件 Oniric Glow Generator for Photoshop【资源分享1444】...

AE特效PR剪辑C4D影视后期全世界只有不到1%的人关注了你是个很特别的人AE影视后期定期推送「AEPRC4D 影视特效合成 婚庆剪辑调色 电视广告包装 微电影制作 SpeedGrade达芬奇专业调色 摄影等」打造影视后期高端学习平台影视后期 ID:AEPRC4D9【PS插件信息】非常棒的一款…