java面向对象(上)--构造方法与this关键字
2021-04-06 22:25
标签:出现 print 创建对象 neu new 多个 mic lazy 简单的 实例化一个对象后,如果要为这个对象中的属性赋值,则必须要通过直接访问对象的属性或调用setXxx()的方式才可以。如果需要在实例化对象的同时就为这个对象的属性赋值,可以通过构造方法来实现。构造方法是类的一个特殊成员,它会在类实例话对象时被自动调用。 在一个类中如果定义的方法满足以下三个条件,该方法被称为构造方法: 方法名与类名相同。 在方法名的前面没有返回值类型的声明,包括void。 这时候大家可能会产生疑问,构造方法不是没有返回值吗?为什么不能用 void 声明呢? 简单的说,这是 Java 的语法规定。实际上,类的构造方法是有返回值的,当使用 new 关键字来调用构造方法时,构造方法返回该类的实例,可以把这个类的实例当成构造器的返回值,因此构造器的返回值类型总是当前类,无须定义返回值类型。但必须注意不要在构造方法里使用 return 来返回当前类的对象,因为构造方法的返回值是隐式的。 注意:构造方法不能被 static、final、synchronized、abstract 和 native(类似于 abstract)修饰。构造方法用于初始化一个新对象,所以用 static 修饰没有意义。构造方法不能被子类继承,所以用 final 和 abstract 修饰没有意义。多个线程不会同时创建内存地址相同的同一个对象,所以用 synchronized 修饰没有必要。 运行结果: 在一个类中除了定义无参的构造方法,还可以定义有参的构造方法。通过有参的构造方法就可以实现对属性的赋值 运行结果: 与普通方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可。在创建对象时,可以提供调用不同的的构造方法为不同的属性赋值。 运行结果: 注意:在java中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统会自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,在其方法体中没有任何代码,即什么也不做。由于系统提供的构造方法往往不能满足需求,因此,我们可以自己在类中定义构造方法,一旦为该类定义了构造方法,系统就不再提供默认的构造方法。在一个类中如果定义了有参的构造方法,最好再定义一个无参的构造方法,避免产生不必要的错误!!! 简单点来说:构造方法用来初始化 java 类,提供类的初始化和实例化,以便调用。 在上面的例子中,构造方法中使用的是con_age,成员变量使用的是age,这样的程序可读性很差,这时需要将一个类中表示年龄的变量进行统一的命名,例如都声明为age。但是这样做又会导致成员变量与局部变量的名称冲突,在方法中将无法访问对象的成员变量age。为了解决这个问题,java中提供了一个关键字this,用于在方法中访问对象的其他成员。 1.通过this关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突问题。 2.通过this关键字调用成员方法。 运行结果: 在上面的openMouth()方法中,使用this关键字调用speak()方法,此处的this关键字可以省略不写,也就是说this.speak()和speak(),效果是完全一样的。 3.构造方法是在实例化对象时被java虚拟机自动调用的,在程序中不能像调用其他方法一样去调用构造方法,但可以在构造方法中使用“this([参数1,参数2....])”的形式来调用其他的构造方法。
运行结果:
在使用this关键字调用类的构造方法时,应注意以下几点: 1.只能在构造方法中使用this调用其他的构造方法,不能再成员方法中使用。 2.在构造方法中使用this调用构造方法的语句必须位于第一行,且只能出现一次。 3.不能在一个类中的两个构造方法中使用this互相调用。 java面向对象(上)--构造方法与this关键字 标签:出现 print 创建对象 neu new 多个 mic lazy 简单的 原文地址:https://www.cnblogs.com/wx60079/p/13392159.html构造方法的定义
无参构造方法
1 public class Person {
2 //下面是类的构造方法
3 public Person() {
4 System.out.println("无参的构造方法被调用了....");
5 }
6 }
7
8 class Example {
9 public static void main(String[] args) {
10 Person p = new Person(); //实例化Person对象
11
12 }
13 }
有参构造方法
1 public class Person {
2 int age;
3
4 //定义有参的构造方法
5 public Person(int a) {
6 age = a;
7 }
8 public void speak(){
9 System.out.println("我今年" + age +"岁!");
10 }
11 }
12
13 class Example {
14 public static void main(String[] args) {
15 Person p = new Person(20); //实例化Person对象
16 p.speak();
17 }
18 }
构造方法的重载
1 public class Person {
2 String name;
3 int age;
4
5 //定义一个参数的构造方法
6 public Person(String con_name,int con_age) {
7 name = con_name;
8 age = con_age;
9 }
10 //定义一个参数的构造方法
11 public Person(String con_name) {
12 name = con_name;
13 }
14
15 public void speak(){
16 System.out.println("大家好!我叫"+name +",我今年" + age +"岁!");
17 }
18 }
19
20 class Example {
21 public static void main(String[] args) {
22 //分别创建两个对象p1,p2
23 Person p1 = new Person("张三");
24 Person p2 = new Person("李芳",20);
25 //通过p1,p2调用speak()方法
26 p1.speak();
27 p2.speak();
28 }
29 }
this关键字
1 public class Person {
2 String name;
3
4 public Person(String name) {
5 this.name = name;
6 }
7
8 public String getName() {
9 return name;
10 }
11
12 public void setName(String name) {
13 this.name = name;
14 }
15
16
17 public void speak(){
18 System.out.println("大家好!我叫"+name +"!");
19 }
20
21 public void openMouth(){
22 this.speak();
23 }
24 }
25
26 class Example {
27 public static void main(String[] args) {
28 //创建对象p1,
29 Person p1 = new Person("张三");
30 //通过p1调用openMouth()方法
31 p1.openMouth();
32 }
33 }
public class Person {
String name;
int age;
//定义一个参数的构造方法
public Person(String con_name,int con_age) {
name = con_name;
age = con_age;
}
//定义一个参数的构造方法
public Person(String con_name) {
name = con_name;
}
public void speak(){
System.out.println("大家好!我叫"+name +",我今年" + age +"岁!");
}
}
class Example {
public static void main(String[] args) {
//分别创建两个对象p1,p2
Person p1 = new Person("张三");
Person p2 = new Person("李芳",20);
//通过p1,p2调用speak()方法
p1.speak();
p2.speak();
}
}
上一篇:工单组件更改BAPI
下一篇:Python类基础知识学习总结
文章标题:java面向对象(上)--构造方法与this关键字
文章链接:http://soscw.com/index.php/essay/72161.html