构造函数
特点:
1、函数名与类名相同。2、不用定义返回值类型。
3、没有具体的返回值。
class Person{
private String name ;
private int age ;
//定义一个Person类的构造函数
//构造函数,而且是空参数的
Person(){
System.out.println("person run");
}
public void speak(){
System.out.println(name + ":" + age);
}
}
class ConsDemo{
public static void main(String[] args){
//构造函数:构建创造对象时调用的函数
//作用:可以给对象进行初始化
Person p = new Person();
p.speak();
}
}
一般函数和构造函数什么区别呢?
构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。
一般函数:对象创建后,需要函数功能时才调用。
构造函数:对象创建时,会调用并且只调用一次。
一般函数:对象创建后,可以被调用多次。
一般函数:对象创建后,需要函数功能时才调用。
构造函数:对象创建时,会调用并且只调用一次。
一般函数:对象创建后,可以被调用多次。
创建对象都必须要通过构造函数初始化。
一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。
如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。
多个构造函数是以重载的形式存在的。
class Person{
private String name ;
private int age ;
Person(){
name = "baby" ;
age = 1;
System.out.println("person run");
}
//如果有的孩子一出生就有名字
Person(String n){
name = n;
}
//如果有的孩子一出生就有名字和年龄
Person(String n, int a){
name = n;
age = a;
}
public void speak(){
System.out.println(name + ":" + age);
}
}
class ConsDemo{
public static void main(String[] args){
Person p1 = new Person();
p1.speak();
Person p2 = new Person("旺财" );
p2.speak();
Person p3 = new Person("小强" ,10);
p3.speak();
}
}
private String name ;
private int age ;
Person(){
name = "baby" ;
age = 1;
System.out.println("person run");
}
//如果有的孩子一出生就有名字
Person(String n){
name = n;
}
//如果有的孩子一出生就有名字和年龄
Person(String n, int a){
name = n;
age = a;
}
public void speak(){
System.out.println(name + ":" + age);
}
}
class ConsDemo{
public static void main(String[] args){
Person p1 = new Person();
p1.speak();
Person p2 = new Person("旺财" );
p2.speak();
Person p3 = new Person("小强" ,10);
p3.speak();
}
}
this关键字:
什么时候使用this关键字?
当在函数内需要用到调用该函数的对象时,就用this。
当在函数内需要用到调用该函数的对象时,就用this。
static关键字:用于修饰成员(成员变量和成员函数)。
被修饰后的成员具备以下特点:
1、随着类的加载而加载。
2、优先于对象存在。
3、被所有对象所共享。
4、可以直接被类名调用。
被修饰后的成员具备以下特点:
1、随着类的加载而加载。
2、优先于对象存在。
3、被所有对象所共享。
4、可以直接被类名调用。
class Person{
//成员变量,实例变量
String name;
//静态变量,类变量
//所有对象共享的属性用static修饰
static String country = "CN";
public void show(){
System.out.println(country + ":" + name);
//等效语句:System.out.println(Person.country + ":" + this.name);
}
}
class StaticDemo{
public static void main(String[] args){
Person p = new Person();
System.out.println(p.country);
//可以用类名直接调用
System.out.println(Person.country);
}
}
//成员变量,实例变量
String name;
//静态变量,类变量
//所有对象共享的属性用static修饰
static String country = "CN";
public void show(){
System.out.println(country + ":" + name);
//等效语句:System.out.println(Person.country + ":" + this.name);
}
}
class StaticDemo{
public static void main(String[] args){
Person p = new Person();
System.out.println(p.country);
//可以用类名直接调用
System.out.println(Person.country);
}
}
成员变量和静态变量的区别?
1. 两个变量的生命周期不同
2. 调用方式不同
3. 别名不同
4. 数据存储位置不同
1. 两个变量的生命周期不同
2. 调用方式不同
3. 别名不同
4. 数据存储位置不同
静态方法中不可以写this,super关键字。
原因:静态方法存在的时候,对象还不存在,this代表的就是调用方法的那个对象,既然不存在,肯定不可以写在静态方法中。
原因:静态方法存在的时候,对象还不存在,this代表的就是调用方法的那个对象,既然不存在,肯定不可以写在静态方法中。