一、构造方法
1.作用
可以给对象的属性进行初始化.
2.格式
1)方法名与类名相同(包括字母的大小写)
2)没有返回值类型和void
3)没有具体的返回值
3.构造方法的重载
构造方法也可以重载,就是说可以有相同名字的方法,用参数列表来区分它们.
构造方法分为有参构造方法和无参构造方法.有参方法是用来给对象属性复制用的.
无参构造方法是在不需要给对象属性赋值的时候,来奖励对象调用方法用.如果没有
自己做出构造方法的话,系统会自动给我们一个无参方法来用,但是如果我们做了一
个有参的构造方法,系统将不会给我们构造方法,如果还需要使用无参方法,我们只
能自己在写出无参构造方法.
class Demo {
public static void main(String[] args) {
Person p1 = new Person();
p1.setName("张三");
p1.setAge(18);
System.out.println(p1.getName() + "," + p1.getAge());
Person p2 = new Person("李四",24);
System.out.println(p2.getName() + "," + p2.getAge());
}
}
class Person {
private String name;
private int age;
public Person() { //空参的构造方法
System.out.println("空参构造");
}
public Person(String name,int age) { //有参构造
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
4.成员方法
成员方法可以根据返回值的不同而设立方法,如返回值是void或者有明确返回值的方法.还可以根据形式参数分为有参方法和无参方法.
class Demo3 {
public static void main(String[] args) {
Demo d = new Demo();
int sum = d.add(10,20);
System.out.println(sum);
d.add(10,20);
}
}
class Demo {
public int add(int a,int b) {
return a + b;
}
}
二、static关键字
1.特点
static关键字随着类的加载而加载,优先于对象的存在,被类的所有对象共享.如果某个成员变量是被所有对象共享的,那么他就iuyinggai设定为静态的.比如我们班同学的国籍.
它可以通过类名调用,也可以用对象名调用.推荐使用类名调用,因为对象会开辟新的空间,占用内存,用完后会产生垃圾.
class Demo1_Static {
public static void main(String[] args) {
Person p = new Person();
p.name = "张三";
p.country = "中国";
p.speak();
}
}
class Person {
String name;
static String country;
public void speak() {
System.out.println(name + "," + country);
}
}
2.注意事项
在静态的方法中,没有this关键字,因为静态是随着类的加载而加载的,this是随着对象的创建而存在的,而静态方法是在对象之前存在的.
静态方法只能访问静态的成员变量或静态的成员方法.非静态方法中,成员变量可以是静态的也可以使非静态的.成员方法可以使静态的成员方法,也可以是非晶态的成员方法.
3.静态变量和成员变量的区别
所属不同:静态变量属于类,所以也被称为类变量.成员变量属于对象,所以也称为实例变量.
内存中位置不同:静态比昂两存储于方法区的静态区.而成员变量存在堆内存中.
内存中的出现时间不同:静态变量随着类的加载而加载,随着对象的消失而消失.
调用的不同:静态变量可以通过类名调用,也可以通过对象名调用.成员变量只能通过对象名调用.
class Demo2_Static {
public static void main(String[] args) {
Demo.print2();
}
}
class Demo {
int num1 = 10;
static int num2 = 20;
public void print1() {
System.out.println(this.num1);
System.out.println(num2);
}
public static void print2() {
System.out.println(num2);
}
}