JAVA学习第九课(关键字一)

关键字:

this 关键字

this 使用一:

直接以代码解释:

class Man
{
	private int age;
	private String name;
	Man()
	{
		name= null;age = 0;
	}
	Man(String n)//正常直接打印"BLF,0",但是把n改为name呢,就会打印null,0
	{	name = n;  }//改成name虽然增加了阅读性,但是参数名进栈时,栈区已经有了一个局部变量名name,
                              那么name的赋值,只会把自己赋值给自己。如同int x = 5; x = x;
 	/*
	Man(String name)
	{
		this.name = name;//this关键字的作用就是说,这个对象的name,那么会进堆内存,就不会起冲突了
	}
	*/
	Man(int a)
	{ age = a; }
	Man(int a,String n)
	{
		age = a;
		name = n;
	}
	void run()
	{
		System.out.println(name+","+age);//实际上这里省略了this.name+","+this.age
	}
}
public class Main
{
	public static void main (String[] args)
	{
		Man jo = new Man("BLF");
		jo.run();
	}
}

所以:当局部变量和成员变量重名时,可以用关键字this来区分,this就代表当前对象(this就是所在函数所属对象的引用):

this代表(构造函数)Man所属的对象jo。哪个对象调用了this所在的函数,那么this就代表那个对象。

PS:只有对象才能调用构造函数

所以,正规且阅读性强的代码

class Man
{
	private int age;
	private String name;
	Man()
	{
		name= null;age = 0;
	}
	Man(String name)
	{	this.name = name;  }
	Man(int age)
	{ this.age = age; }
	Man(int age,String name)
	{
		this.age = age;
		this.name = name;
	}
	void run()
	{
		System.out.println(this.name+","+this.age);
	}
}
public class Main
{
	public static void main (String[] args)
	{
		Man jo = new Man("BLF");
		jo.run();
	}
}

以内存分配图解释this

this 使用二:

this可以在构造函数里调用其他构造函数

错误演示:

class Man
{
	private int age;
	private String name;
	Man()
	{
		name= null;
		age = 0;
	}
	Man(String name)
	{	this.name = name; 

	}
	Man(int age)
	{
		this.age = age; 

	}
	Man(int age,String name)
	{
		//上面已经写过了,是不是就可以进行调用了呢?答案是否定的
		this.Man(name);//this代表了对象,对象要想进行是使用必须先初始化,但是
		this.Man(age);//这里还没有进行初始化,就开始使用,所以是错误的

	}
	void run()
	{
		System.out.println(this.name+","+this.age);
	}
}
public class Main
{
	public static void main (String[] args)
	{
		Man jo = new Man(12,"BLF");//此处传2个参数
		jo.run();
	}
}

修改

class Man
{
	private int age;
	private String name;
	Man()
	{
		name= null;
		age = 0;
	}
	Man(String name)
	{
		this.name = name;
	}
	Man(int age)
	{
		this.age = age;
	}
	Man(int age,String name)
	{
		this(name);//调用上述构造函数,注意:必须放第一行,房子this.age  = age;下面就错,理由见下
		this.age = age;
	}
	void run()
	{
		System.out.println(this.name+","+this.age);
	}
}
public class Main
{
	public static void main (String[] args)
	{
		Man jo = new Man(12,"BLF");
		jo.run();
	}
}

注意:this 规则:this只能定义在构造函数的第一行,因为初始化必须先执行

下述代码,this如果放下面

	Man(int age,String name)
	{
		this.name = name;//初始化BLF
		this.age = age;//初始化12

		this("gggg"); //改变BLF,变为gggg,故错误
	}

PS:this() 不要滥调用.

this的应用

import java.security.cert.TrustAnchor;

class Man
{
	private int age;
	private String name;
	Man()
	{
		name= null;
		age = 0;
	}
	Man(String name)
	{
		this.name = name;
	}
	Man(int age)
	{
		this.age = age;
	}
	Man(int age,String name)
	{
		this(name);//调用上述构造函数,注意:见下
		this.age = age;
	}
	public void run()
	{
		System.out.println(this.name+","+this.age);
	}
	/*判断两个人是否是同龄人*/
	public boolean judge(Man g)
	{
		return this.age == g.age;//这里的this代表jo2

	}
}
public class Main
{
	public static void main (String[] args)
	{
		Man jo = new Man(12,"BLF");
		Man jo2 = new Man(12,"BLF2");
		boolean flag = jo2.judge(jo);
		if(flag==true)
			System.out.println("YES");
		else
			System.out.println("NO");
	}
}
时间: 2024-11-01 18:58:17

JAVA学习第九课(关键字一)的相关文章

JAVA学习第九课(关键字二static)

关键字二. static(静态) 特点: static 用于修饰成员(成员函数和成员函数) static的存在,优先于对象存在,随着类的加载而加载 static所修饰的成员,被所有对象共享 static可以直接被类名调用,格式:System.out.println(Person.country);:类名.静态成员 使用细节 静态方法只能访问静态成员,即static修饰的成员,static int data; 静态方法不可以写this.super:this代表着当前调用该方法的对象. 主函数(ma

Java学习之finally关键字总结

Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如

Java学习笔记---一些关键字的使用

一.instanceof 作用:判断一个引用类型的变量所指向的对象是否是一个(或接口.抽象类.父类)的实例. 用法:boolean result= object instanceof class. 二.strictfp 作用:用来确保浮点数运算的准确性.如果没有指定strictfp关键字,此时计算结果可能会是不精确.此关键字可以保证Java编译器以及运行环境完全依照IEEE二进制浮点数算术标准来执行. 用法: public strictfp class Test{ public static v

JAVA学习第一课(初识JAVA)

PS:退ACM集训队了,自己也疯玩了两天,后天就开学了,就正式大二了,该收收心好好学习啦                                                                                  JAVA概述 首先先复习一下基础常识: 1.软件开发 2.人机交互 3.经常使用的DOS命令 一.软件开发 什么是软件? 软件是一系列依照特定顺序组织的计算机数据和指令集合(指令:是处理数据的方式) 常见的软件有:系统软件(DOS.WIndows.

JAVA学习第一课

                                          JAVA概述 首先先复习一下基础常识: 1.软件开发 2.人机交互 3.常用的DOS命令 一.软件开发 什么是软件? 软件是一系列按照特定顺序组织的计算机数据和指令集合(指令:是处理数据的方式) 常见的软件有:系统软件(DOS.WIndows.Linux),应用软件(QQ.360.迅雷) 所以,软件开发就是指制作软件,将一系列的数据和集合组织起来 二.人机交互 软件使人和计算机更好的交互 交互方式: 1.图形化界

java 学习第一课,JDK工具包的安装

1. jdk 的下载 目前为止,jdk的最新版是jdk8,http://www.oracle.com/technetwork/java/javase/downloads/index.html 到这里下载  目前我用的是win7 64位操作系统,所以下载如下这个连接: 2. JDK 8 的安装 安装时,对话框 会先让你安装 JDK,我选择 E:\java\jdk8 这个安装好之后,会让你再选择一个目标文件夹,用于安装JRE, 这里要注意的是,不能与之前的JDK安装在一个目录中,否则环境变量将设置不

JAVA学习第四十一课 — 泛型的基本应用(一)

泛型是JDK1.5以后出现的安全机制,简化机制,提高安全性 泛型的优点 1.将运行时出现的问题ClassCastException转移到了编译时期 2.避免了强制转换的麻烦 <>在当操作的引用数据类型不确定的时候使用,将要操作的引用数据类型导入即可,其实<>就是一个用于接收具体引用数据类型的参数范围 在写程序时,只要用到了带<>的类或接口,就必须要明确传人的具体引用数据类型 import java.util.ArrayList; import java.util.Ite

Java学习日记-5 关键字static和final 以及接口

乱入:表达式中的自动类型转换 char,short,byte都升级为int类型进行运算,结果为int,但其原变量类型并不改变. 所以,byte b = 10;  b = b*b; 编译时会报错.但是写成 b *=b; 就没问题了. ——————————————华丽的分割线———————————————————————— //static与final一.static 1.位于变量前 变量为静态变量,可通过类名调用 2.位于方法前 方法为静态方法,可通过类名调用 存储在静态区,可以被所有对象直接访问

Java学习 - 引出this关键字

需求:定义一个User类,提供name,age字段,以及相应getter/setter方法. 并创建对象,设置name和age数据,在打印对象的name,age. 什么是this: 表示当前对象,什么又是当前对象 this只要存在于两个位置: 构造器中:就表示当前创建的对象 方法中:哪一个对象调用this所在的方法,那么此时this就表示哪一个对象: 使用this: 1:解决成员变量和参数(局部变量)之间的二义性,必须使用: 2:同类中实例方法间互调(此时可以省略this,但是不建议省略). 3