类
1.属性 ---- 静态描述类的特征(变量,存值)
2.方法 ---- 动态描述类的行为(做事情)
3.构造方法 ---- 用来创建当前类的对象(是一个特殊的方法)
4.程序块(代码块) — 一个无修饰符无参数无返回值的方法
构造方法
- 作用:为构建(构造)当前类的对象
- 写法:
权限修饰符 [返回值类型(当前类)] 与类名一致的方法名(参数列表) [异常]{
一件事情 创建一个对象(当前类Demo)
返回对象;
}
- 通过new关键字调用
public class Demo{
public Demo() {
System.out.print("我是Demo的构造方法");
}
}
public class Main {
public static void main(String[] args){
Demo demo = new Demo();
}
}
/*输出
我是Demo的构造方法
*/
- 构造方法的特点
1 每一个类都有构造方法,若自己在类中没有定义,系统会默认提供一个无参数的构造方法,如果在类中自己定义了构造方法,则默认无参数的构造方法就被覆盖。
2 构造方法是否存在重载???
存在构造方法重载
public class Demo{
public Demo() {
System.out.println("我是Demo的构造方法");
}
public Demo(String s) {
System.out.println("我是带String参数的Demo类的构造方法"+s);
}
}
public class Main {
public static void main(String[] args){
//Demo demo = new Demo();
Demo d2 = new Demo("123");
}
}
/*输出
我是带String参数的Demo类的构造方法123
*/
- 每一个类都有构造方法,我们为什么要定义构造方法,什么时候需要设计构造方法?
在创建对象的同时,我们想要一并做一些事情,默认提供的构造方法是不会做的,这个时候可以自己定义构造方法(无参数的构造方法内做事,也可以定义带参数的)
public class Demo{
public String name;
public int age;
public String sex;
// 最好将系统自带的无参数默认构造方法也一起写上
public Demo(){}
public Demo(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
public class Main {
public static void main(String[] args){
//Demo demo = new Demo();
Demo demo = new Demo("小明",18,"男");
System.out.println("我是"+demo.name+"年龄是"+demo.age+"性别是"+demo.sex);
}
}
/*输出
我是小明年龄是18性别是男
*/
======================================================================================
构造方法中属性与变量重名,必须需要一个代替词代替对象
this关键字的使用
- 是一个关键字(指代词),代替的是某一个对象(是当前调用属性或方法时的那个对象)
- this既然代替的是一个对象
this可以调用什么? 属性 方法
this可以调用构造方法嘛?
构造方法在一般方法之前执行,在一般的方法内不可以调用构造方法。
可以在一个构造方法中通过this();
调用另一个构造方法,省略构造方法的名字(必须与类名一致)
必须在另一个构造方法内使用,必须在程序的第一行
public class Demo{
public String name;
public int age;
public String sex;
public Demo(){
System.out.println("我是默认构造函数");
}
public Demo(String name, int age, String sex) {
this(); //调用另一个构造方法
this.name = name;
this.age = age;
this.sex = sex;
}
}
public class Main {
public static void main(String[] args){
//Demo demo = new Demo();
Demo demo = new Demo("小明",18,"男");
System.out.println("我是"+demo.name+"年龄是"+demo.age+"性别是"+demo.sex);
}
}
/*输出
我是默认构造函数
我是小明年龄是18性别是男
*/
- this调用的过程可以放置在哪个位置写?
可以在类的任意成员位置
程序块(代码块)
- 作用:跟普通方法一样,用来执行一些事情
- 写法:可以认为程序块是一个 没有修饰符,没有参数,没有返回值没有名字的特殊方法
{
}
- 用法:块也需要调用才能执行,我们自己调用不到(因为块没有名字)
每一次调用构造函数之前,系统会帮我们自动调用一次程序块,让他执行一遍 - 特点:没有什么重载的概念(因为压根连名字都没有参数都没有),但是可以在类中定义多个程序块
- 块可以在里面写一些程序,在想要创建对象之前执行
- 可以限制某些类属性或者对象的生命周期
public class Demo{
public String name;
public int age;
public String sex;
{
System.out.println("我是一个代码块");
}
public Demo(){}
public Demo(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
public class Main {
public static void main(String[] args){
//Demo demo = new Demo();
Demo demo = new Demo("小明",18,"男");
System.out.println("我是"+demo.name+"年龄是"+demo.age+"性别是"+demo.sex);
}
}
/*输出
我是一个代码块
我是小明年龄是18性别是男
*/