首页 > 编程语言 >Java的this关键字和构造方法与匿名对象

Java的this关键字和构造方法与匿名对象

时间:2023-01-09 12:11:19浏览次数:46  
标签:Java String 构造方法 Person age 关键字 public name

this关键字的作用

 

1.表示类中的属性

2.可以使用this调用本类的构造方法

3.this表示当前对象

 

1.1 this 调用本类中的属性

class Person {

private String name; // 姓名

private int age; // 年龄

public Person(String name,int age){ // 通过构造赋值

this.name = name ; // 明确表示为类中的name属性赋值

this.age = age ; // 明确表示为类中的age属性赋值

}

public String getInfo() { // 取得信息

return "姓名:" + name + ",年龄:" + age;

}

}

public class ThisDemo02 {

public static void main(String[] args) {

Person per1 = new Person("张三",33) ; // 调用构造实例化对象

System.out.println(per1.getInfo()) ; // 取得信息

}

}

 

2.1 使用this调用构造方法

避免代码重复,让构造方法之间互相调用,使用this(若干参数)的形式完成.

如果一个类中有多个构造方法的话,也可以利用this关键字互相调用。

假设现在要求不管类中有多少个构造方法,只要对象一被实例化,就必须打印一行“新对象实例化”的信息出来,很明显,此时如果在各个构造方法中编写此输出语句肯定不合适,所以此时就可以利用this的概念完成。

package demo0309;

public class Test1 {

public static void main(String[] args) {

Person p=new Person("呵呵呵",12); //调用有参构造

System.out.println(p.getInfo()); //输出信息

 

}

}

class Person{

private String name; //私有化姓名

private int age; //私有化年龄

public Person() { //无参构造

System.out.println("一个新的Person对象被实例化! ");

}

public Person(String name,int age) {

this(); //此处调用Person类中的无参构造方法

this.name=name;

this.age=age;

}

public String getInfo() { //取得信息

return "姓名:  "+name+" 年龄 :"+age;

}

}

使用this调用构造方法必须也只能放在构造方法的第一行。

 

 

3.1this表示当前对象在java中当前对象就是指当前正在调用类中方法的对象。

class Person {

public String getInfo() {

System.out.println("Person类 --> " + this); // 直接打印this

return null ; // 此处返回null,为的是让语法不出错

}

}

public class ThisDemo06 {

public static void main(String[] args) {

Person per1 = new Person() ;

Person per2 = new Person() ;

System.out.println("MAIN方法 --> " + per1); // 直接打印对象

per1.getInfo() ;

System.out.println("--------------------------") ;

System.out.println("MAIN方法 --> " + per2); // 直接打印对象

per2.getInfo() ;

}

}

静态方法中不能使用this关键字

 

 

 

只要一有对象实例化则就会调用构造方法。

1.构造方法的定义格式

class 类名称{

访问权限 类名称(类型1 参数1,类型2 参数2,…){

程序语句 ;

…    // 构造方法没有返回值

}

}

1.1在构造方法的声明中一定要牢记以下几点:

构造方法的名称必须与类名称一致

构造方法的声明处不能有任何返回值类型的声明

不能在构造方法中使用return返回一个值

2.声明一个构造方法

class Person {

public Person(){ // 声明构造方法

System.out.println("一个新的Person对象产生。") ;

}

}

public class ConsDemo01 {

public static void main(String args[]) {

System.out.println("声明对象:Person per = null ;") ;

Person per = null ; // 声明对象时不调用构造

System.out.println("实例化对象:per = new Person() ;") ;

per = new Person(); // 实例化对象时调用构造

}

}

3.默认的构造方法

每个类中肯定都会有一个构造方法。

如果一个类中没有声明一个明确的构造方法则会自动生成一个无参的什么都不做的构造方法。

class Person {

public Person(){}

}

4.构造方法的目的

构造方法的主要目的是为类中的属性初始化。

 

class Person {

private String name; // 声明姓名属性

private int age; // 声明年龄属性

public Person(String name,int age){ // 定义构造方法为属性初始化

this.setName(name) ; // 为name属性赋值

this.setAge(age) ; // 为age属性赋值

}

public void tell() { // 取得信息的方法

System.out.println("姓名:" + getName() + ",年龄:" + getAge());

}

public int getAge() {

return age;

}

public void setAge(int a) { // 设置年龄

if (a >= 0 && a < 150) { // 在此处加上验证代码

age = a;

}

}

public String getName() {

return name;

}

public void setName(String n) {

name=n;

}  

}

}

public class ConsDemo02 {

public static void main(String args[]) {

Person per = new Person("张三",30); // 调用构造方法,传递两个参数

per.tell(); // 输出信息

}

}

5. 构造方法重构

构造方法的重载过程与普通方法一样。

参数的类型或个数不同

 

public Person(){}

public Person(String name){

this.setName(name) ;

}

public Person(String name,int age){

this.setName(name) ;

this.setAge(age) ;

}

6.构造方法的注意事项

package demo0310;

class Person{

private String name;

private String gender;

private int age;

private String address;

public Person(String name,String gender,int age,String address) {

this.name=name;

this.gender=gender;

this.age=age;

this.address=address;

System.out.println(this.name+" "+this.gender+" "+this.age+" "+this.address);

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

 

 

}

public class Test1 {

public static void main(String[] args) {

Person p=null;//声明对象时不调用构造方法

p=new Person("张天伦","男",21,"陕西省");//实例化对象时调用构造方法

 

 

}

}

声明对象时不调用构造方法

实例化对象时调用构造方法

 

 

 

 

 

7.匿名对象

只使用一次的对象,称为匿名对象。

匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。

 

public class NonameDemo01 {

public static void main(String args[]) {

new Person("张三", 30).tell(); // 匿名对象

}

}

 

 

标签:Java,String,构造方法,Person,age,关键字,public,name
From: https://www.cnblogs.com/YZTL/p/17036644.html

相关文章

  • java解决跨域问题
    什么是跨域 1)、协议不同2)、域名不同(IP地址不同)3)、端口号不同跨域是指一个页面想获取另一个页面中的资源,如果这两个页面的协议、域名、子域名、端口不同,或者两个页面......
  • Java_基础总结
    总结。  一、运行环境jdk:开发工具包jre:运行时环境jvm:虚拟机编译:使用javac,将.java源文件编译为.class文件。运行:使用java,运行.class文件......
  • 03 JavaScript
    JavaScriptECMAScript和JavaScript的关系1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECM......
  • (四)Java异常
    Java异常1、运行时异常运行时异常都是RuntimeException子类异常NullPointerException-空指针异常ClassCastException-类转换异常IndexOutOfBoundsExcepti......
  • JavaScript 性能优化
    1.内存管理内存管理介绍内存:由可读写单元组成,表示一片可操作空间管理:人为的去操作一片空间的申请、使用和释放内存管理:开发者主动申请空间、使用空间、释放空......
  • Java方法
    方法System.out.println();//是什么吗?//系统类+对象+方法Java方法是一对语句的集合,他们一起负责执行一个功能方法是解决一类问题的步骤的有序组合方法包含于......
  • 让 Java Agent 在 Dragonwell 上更好用
    本文是《容器中的Java》系列文章之3/n,欢迎关注后续连载 ......
  • 连号区间数java
    小明这些天一直在思考这样一个奇怪而有趣的问题:在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间[L,R]里的所有元素(即此排列的第L个到第R个元......
  • 10(结构型模式)java设计模式之代理模式
    一、什么是代理模式简介:代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。为其他对象提供—种代理以控制对这个对象的......
  • Java基础语法
    之前学习java记得笔记,但是一直没怎么遇到java类的题,平时也不用java,所以经常忘记,今天想起来了再看一遍,再把之前写的笔记整理整理发到博客上。Java预学习Jave的优势从互联......