Java零基础学习131-144构造方法和This关键字

课程链接:https://www.bilibili.com/video/BV1Rx411876f
开始时间:2020-10-11

构造方法

[修饰符列表] 构造方法名(形式参数列表){
构造方法体;
}
普通方法(函数)的语法结构
[修饰符列表] 返回值类型 方法名(形式){
方法体
}
构造方法不需要写返回值类型
不能写void,写上就变成普通方法了

构造方法的调用可以创建对象
普通方法调用:类名.方法名(实参列表)
方法修饰符列表中没有static时,用 引用.方法名(实参列表)
构造方法: new 构造方法名(实参列表)
执行结束后返回

package constructorTest01;

public class User {

}

package constructorTest01;

public class ConstructorTest {
	public static void main(String[] args) {

		User u = new User();
		// 执行后返回地址,不需要自己写return
		// 返回值类型就是构造方法所在类的类型,所以不需要自己写
	}

}

在这里插入图片描述
如果定义一个带参数的构造函数
在这里插入图片描述
那么直接生成的就不正确了
在一个类的构造方法中,方法还可以重载
在这里插入图片描述
系统默认是给一个无参的方法

按ctrl 然后把鼠标移动到要查看的元素上,就能跳转到访问的是哪个方法

package constructorTest01;

//账户类
public class Count {
	private String actno;
	private double balance;

	public String getActno() {
		return actno;
	}

	public void setActno(String actno) {
		this.actno = actno;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}

}

package constructorTest01;

public class Constructor02 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 给对象属性赋值
		Count act1 = new Count();
		System.out.println(act1.getActno());
		System.out.println(act1.getBalance());
	}

}

package constructorTest01;

//账户类
public class Count {
	private String actno;
	private double balance;
	
	public String getActno() {
		return actno;
	}

	public void setActno(String actno) {
		this.actno = actno;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}

	public Count() {
		super();
	}

	public Count(String actno) {
		super();
		this.actno = actno;
	}
	
}

生成构造函数
右键-source
在这里插入图片描述
一般来说,先构造两个无参的,再构造有参数的,可以重载

package constructorTest01;

public class Constructor02 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 给对象属性赋值
		Count act1 = new Count();
		System.out.println(act1.getActno());
		System.out.println(act1.getBalance());
		Count act2 = new Count("Count");
		System.out.println(act2.getActno());
		
	}

}

如果有static,直接用方法,没有static,就需要new一个对象,通过对象来调用方法

传的是地址,不是值,所以改了之后值也要变

package constructorTest01;

public class TestDemo {

	public static void main(String[] args) {
		UUser u = new UUser(20);
		add(u);
		System.out.println("main" + "-->" + u.age);

	}

	public static void add(UUser u) {
		u.age++;
		System.out.println("Add" + "-->" + u.age);
		// u传的是地址,所以两个值都要变
	}
}

class UUser {
	int age;

	public UUser(int i) {
		age = i;
	}
}

在这里插入图片描述

this关键字

在这里插入图片描述

this是一个引用,保存的内存地址指向了自身

package test01;

public class Customer {
	String name;

	public Customer() {
		// 没有static关键字,实例方法/变量
		// 必须采用引用. 的方式访问
	}
	public void shopping()
	{
		System.out.println(this.name +"is shopping!");
	}
}

package test01;

public class CustomerTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Customer c1 = new Customer();
		c1.name = "张三";
		Customer c2 = new Customer();
		c2.name = "李四";
		c2.shopping();
		System.out.println(c1.name + c2.name);
	}

}

当一个行为必须要对象参与时,就不要加static了,直接定义为实例变量/方法
在这里插入图片描述
当然,上述情况内的this可以省略

	public static void doSome()
	{
		System.out.println("做点啥");
	}
		Customer.doSome();

有static,采用类名. 访问,不需要对象,这个时候不能用this了

	package test20201017;
	
	public class User {
		private int id;
		private String name;
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
			//左边是实例变量id,右边是局部变量id
			//做区分的时候this不能省略
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
	
	}

实例化对象会继承类的属性
通过引用来操作方法也行,但是会提示警告,应该用类来操作才科学
执行的和引用的对象无关

package test20201017;

public class Test {
	public static void main(String[] args)
	{
		Test.dosome();
		Test T=new Test();
		T=null;//实际上写这个,本来应该空引用的,但是调用的时候并不是引用调用的
		//靠的还是Test.dosome(),只是爆出警告
		T.dosome();
	}
	public static void dosome()
	{
		System.out.println("DoSth");
	}
}

这么写没问题,但是如果把实例t的指向变一下,会出现报错

结束时间:2020-10-14

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值