java 13. 方法重载构造方法块this用法
利用类来描述现实生活中的事情
利用对象去具体的执行操作
类的内部成员Person
属性:静态描述类的特征(变量、存值)
方法:动态描述类的行为(做事情)
构造方法:用来创建当前类的对象(方法,很特殊)
程序块(代码块):理解为就是一个方法(非常特殊,无修饰符无参数无返回值无名字)
构造方法
类中的第三个成员 --构造方法
-
作用:只有一个构建(构造)当前类的对象
-
写法:
权限修饰符 与类名一致的方法名(参数列表) [抛出异常]{
一件事情 创建一个对象(当前类Person)
返回对象;//返回值类型省略了
}
-
用法:通过new关键字调用
-
特点:
a. 每一个类都有构造方法,若自己在类中没有定义,系统会默认提供一个无参数的构造方法,若在类中自己定义了构造方法,则默认无参数的构造方法即被覆盖
b. 构造方法存在构造方法重载
-
每一个类都有构造方法
若不定义,系统会默认提供构造方法
为什么要定义构造方法?什么时候需要设计构造方法?
在创建对象的同时,想要一并做一些事情,默认提供的构造方法是不会做的,这个时候我们可以自己定义构造方法(无参数的构造方法内做事,也可以定义带参数的)
public class Person { public String name; public int age; public String sex; //自己定义带参数的构造方法时,把系统提供的默认无参数的构造方法一起写出来,构成构造方法的重载 public Person(String n,int a,String s){ name = n; age = a; sex = s; } //权限修饰符 类名一致的方法名(参数列表) [抛出异常]{方法体} //只有这么一个特殊的方法,名字是大写字母 //少了结构,特征修饰符(没有),返回值类型(结构上没有返回值类型,但是有返回值 对象) public Person(){ System.out.println("我是Person类的构造方法"); } } public class Test { public static void main(String[] args){ //调用Person类中的构造方法 // Person p = new Person("abc"); //自己定义带参数的构造方法时,把系统提供的默认无参数的构造方法一起写出来,构成构造方法的重载 Person p = new Person("香吉士",17,"男"); System.out.println(p.name+"今年"+p.age+"岁,"+"性别:"+p.sex); } }
但是为了见名知意,如下
public class Person { public String name; public int age; public String sex; public Person(String n,int a,String s){ name = n; age = a; sex = s; } //我修改为 public Person(String name,int age,String sex){ name = name; age = age; sex = sex; } //这样就会造成变量和属性重名,因为就近原则,再main函数调用(new Person(name,age,sex))的时候就不能用了,为了解决这个问题,下面引入this关键字 //继续修改Person方法为 public Person(String name,int age,String sex){ this.name = name;//this指代Person()对象 this.age = age; this.sex = sex; } }
类的第四个成员 --程序块(代码块)
-
作用:跟普通方法一样 做事情的
-
写法:可以认为程序是一个 没有修饰符 没有返回值 没有名字的特殊方法
{
}
-
用法:块也需要调用才能执行,我们自己调用不到(没有名字),每一次我们调用构造方法之前,系统会帮我们自动的调用一次程序块,让他执行一遍
-
特点:没有什么重载的概念(压根连名字都没有 连参数都没有),但是可以在类中定义 多个程序块
-
块可以在里面写一些程序,我想要在创建对象之前执行时
this关键字的使用 --构造方法中属性和变量重名,必须要一个代替词来代替对象
-
是一个关键字(指代词)代替的是某一个对象(当前调用属性或方法时的那个对象)
-
this既然代替的时一个对象,this可以调用什么?
-
属性 this.name
-
方法 this.eat() ,一般方法是先创建对象,然后对象去执行(调用)
-
构造方法
-
是创建对象的,早于一般方法,在一般方法内无法调用构造方法,
-
构造方法可以重载构造方法,
-
构造方法内可以调用另一个构造方法(this() 省略构造方法的名字,因为构造方法的名字必须与类名一致)
-
必须在另一个构造方法内调用,必须在程序的第一行
public Person(String name,int age,String sex){ this();//放在第一行可以 this.name = name; this.age = age; this.sex = sex; this();//放在这里不可以,报错 }
-
-
-
this调用的过程可以放在那个位置写?
调用属性或者方法这一行代码,可以放在类中的任何成员位置,上下顺序随意
总结
类的四个成员
-
属性 -- 静态描述特征(存值)
权限修饰符 [特征修饰符] 属性类型 属性名字 [= 值] -
方法 -- 动态描述行为(做事情)
权限修饰符 [特征修饰符] 返回值类型 方法名字 ([参数列表]) [抛出异常] [{方法体}]最主要的是方法设计的参数及返回值问题 传递 调用 执行 内存
-
构造方法 -- 创建当前类对象(做事情,唯一的事情)
权限修饰符 与类名一致的方法名 ([参数列表]) [抛出异常] -
程序块 -- 一个特殊的方法(没名 做事情 不用我们调用 构建对象之前调用)
-
this 关键字的使用
用来代替某一个对象可以调用一般属性或方法,放置在任何类成员中
可以调用构造方法,只能放在另一个构造方法内,只能放在程序的第一行
-
类的加载及对象的创建(内存原理 机制)
小任务
- 设计一个类模拟一个计算器,做加减乘除 方法 计算方法
控制台输出
请输入第一个数:1
请输入符号:+
请输入第二个数:2
3 (输入2之后输出来结果3,然后立马弹出请输入符号)
请输入符号:-
请输入第二个数:2
1
-
设计一个类,替代数组可以做的事情
数组 长度是固定的 存储一组元素 长度一旦固定,使用起来不太方便,添加元素 删除元素 设计一个类 -- 充当一个容器,ArrayBox 能添加元素,获取元素,删除元素 看看到底有几个