课程链接: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