黑马程序员---java基础---面向对象中的构造方法及static关键字,变量的问题

时间:2021-02-23 00:44:41


------- android培训java培训、期待与您交流! ----------
 

一.构造方法:
  1.当实例化一个类的对象时,JVM会自动调用本类的一个方法:构造方法;
  2.定义类时,可以不定义构造方法,编译器会自动添加一个无参,什么都不做的构造方法;
  3.如果类中定义了构造方法,编译器就不会添加任何构造方法了;
  4.构造方法的格式要求:
   1).构造方法名必须与类名一致;
   2).构造方法不能定义“返回值类型”,甚至是void;
   3).构造方法不能返回一个具体的值,但内部可以使用return;语句;
   注意:
   1).以下代码可以编译通过:
    class Student(){
     public void Student(){  //普通成员方法,不是构造方法;
     }
    }
   2).以下代码不能通过编译:
    class Student(){
     public student(){  //构造方法必须同类名一致,包括大小写;
     }
    }
  5.一个类中可以定义多个“构造方法”,但每个构造方法的形参列表不能完全相同,叫:构造方法的重载;

例如:

</pre><pre class="java" name="code">class Student
{
private String name;
private int age;

//可以编译通过,此方法,被当成是"普通成员方法"
void Student(){
System.out.println("我只是个普通成员方法");
}
//此方法,才是构造方法;
Student(){
System.out.println("Student类的无参构造方法......");
}
Student(String n){
name = n;//作用:相当于setName()方法
System.out.println("Student类的String的构造方法......");
}
Student(int n){
age = n;//作用:相当于setAge()方法
System.out.println("Student类的int的构造方法......");
}
Student(String name,int age){
this.name = name;
this.age = age;
}

//一些get和set方法;
void setName(String name){
this.name = name;

}
String getName(){
return this.name;
}
void setAge(int age){
this.age = age;
}
int getAge(){
return this.age;
}
}

class Demo
{
public static void main(String[] args)
{
Student stu = new Student();//调用无参的构造方法
stu.setName("张学友");
stu.setAge(22);

Student stu2 = new Student("张三");//调用String的构造方法
Student stu3 = new Student(20);//调用int的构造方法

Student stu4 = new Student("刘德华",20);
System.out.println(stu4.getName() + "----" + stu4.getAge());
}
}



  6.在一个构造方法中可以调用另一个构造方法,使用this关键字;
  7.构造方法可以调用“成员方法”,但“成员方法”不能调用构造方法;
                  构造方法也可以调用其它构造方法;
 二.static关键字:
  1.static关键字:静态的,全局的。
  2.可以修饰“成员变量”和“成员方法”。被static修饰的成员变量存储在方法区的“静态存储区”,只有
                  一份拷贝,被多个对象共享
  3.特点:
     1).随着类的加载而加载
     2).优先于对象存在
     3).被类的所有对象共享
     4).可以通过类名调用,也可以通过对象名调用;

如:

class Const
{
static double PI = 3.14159;
static String schoolName = "黑马程序员-北京校区";
}
class Demo
{
public static void main(String[] args)
{
//用PI值,只需要通过类名就可以直接使用了
System.out.println("获取PI值:" + Const.PI);
}
}


  4.static关键字注意事项:
   1).在静态方法中是没有this关键字的
   2).静态方法只能访问静态的成员变量和静态的成员方法
 三.静态变量和成员变量的区别:
  1.所属不同
   1).静态变量属于类,所以也称为为类变量
   2).成员变量属于对象,所以也称为实例变量(对象变量)
  2.内存中位置不同
   1).静态变量存储于方法区的静态区
   2).成员变量存储于堆内存
  3.内存出现时间不同
   1).静态变量随着类的加载而加载,随着类的消失而消失
   2).成员变量随着对象的创建而存在,随着对象的消失而消失
  4.调用不同
   1).静态变量可以通过类名调用,也可以通过对象调用
   2).成员变量只能通过对象名调用