1.作用域
基本作用
面向对象中,变量作用域是非常重要的知识点,相对来说不是特别好理解,认真思考,深刻掌握变量作用域
- 在Java编程中,主要的变量就是属性(成员变量)和局部变量
- 局部变量一般是指在成员方法中定义的变量
Java中作用域的分类
- 全局变量:也就是属性,作用域为整个类体
- 局部变量:也就是除了属性之外的其他变量,作用域为定义它的代码块中
- 全局变量(属性)可以不赋值,直接使用,因为有默认值,局部变量必须赋值后才能使用,因为没有默认值
注意事项和使用细节
- 属性和局部变量可以重名,访问时遵循就近原则
- 在同一个作用域中,比如在同一个成员方法中,两个局部变量不能重名
- 属性生命周期长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变量生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁。即在一次方法调用过程中。
- 作用域范围不同 全局变量/属性:可以被本类使用,或其他类使用(通过对象调用) 局部变量:只能在本类中对应的方法中使用
- 修饰符不同 全局变量/属性可以加修饰符 局部变量不可以加修饰符
2.构造器/构造方法
需求
前面创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在构建人类对象时,就直接指定这个对象的年龄和姓名,该怎么做?这时就可以使用构造器
基本语法
[修饰符] 方法名(形参列表) {
方法体;
}
说明
- 构造器的修饰符可以默认,也可以是public protected private
- 构造器没有返回值,也不能写void
- 方法名和类名必须一致
- 参数列表和成员方法一样的规则
- 构造器的调用由系统完成
基本介绍
构造方法又叫构造器,是类的一种特殊方法,它的主要作用是完成对新对象的初始化。它有几个特点:
- 方法名和类名相同
- 没有返回值,也不能写void
- 在创建对象时,系统会自动调用该类的构造器完成对象的初始化
快速入门
public class Constructor01 {
public static void main(String[] args) {
Person p = new Person("logic", 20);
System.out.println(p.name);
}
}
class Person {
String name;
int age;
public Person(String pName, int pAge) {
System.out.println("构造器被调用~~");
name = pName;
age = pAge;
}
}
注意事项和使用细节
- 一个类可以定义多个不同的构造器,即构造器重载
- 构造器和类名要相同
- 构造器没有返回值
- 构造器是完成对象的初始化,并不是创建对象
- 在创建对象时,系统自动的调用该类的构造方法 无需自己调用
- 如果程序员没有定义构造器,系统就会自动给类生成一个默认无参构造器(也叫默认构造器),比如Dog(){},使用javap指令 反编译看看
- 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非显式的定义一下,即:Dog(){} (这点很重要)
class Dog {
Dog() {
}
}
class Dog {
String name;
public Dog(String dName) {
}
}
自动把默认构造器给覆盖了
构造器的练习
public class Constructor01 {
public static void main(String[] args) {
Person p = new Person();
System.out.println(p.name + " " + p.age);
Person p2 = new Person("logic", 20);
System.out.println(p2.name + " " + p2.age);
}
}
class Person {
int age;
String name;
//第一个无参构造器 利用构造器设置所有人的age属性初始化值为18
public Person() {
System.out.println("调用默认!");
age = 18;
}
//第二个带pName和pAge两个参数的构造器:使得每次创建Person对象的同时
//初始化对象的age属性值和name属性值。
public Person(String pName, int pAge) {
System.out.println("调用初始!");
name = pName;
age = pAge;
}
}