疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

构造函数、static关键字


 

     构造方法也称构造函数:

  每一个类都至少有一个构造方法,可以隐式存在或显式存在,而且可以有1-N个构造方法但是参数列表不可以一样。

  构造方法是一种特殊的方法,具有以下特点。

  (1)构造方法的方法名必须与类名相同。

  (2)构造方法没有返回类型,也不能定义为void。

  (3)构造方法的主要作用是完成对象的初始化工作。

  (4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。

  (5)构造方法可以重载,以参数的个数,类型,或排列顺序区分。

  在一个类中如果不显式写构造方法,那么这个类默认就会存在一个隐式构造方法,而且是无参的,一旦这个类中显式的写出一个构造方法,那么不管是有参的还是不参的,那个默认的无参构造方法就不存在了。

  所以在这建议在定义类时写一个无参构造方法。

  在实例化对象的时候,不表明调用哪个构造方法,则默认就会调用无参的构造方法。

  定义构造方法:

  1 public class Person

  2 {

  3 /*

  4 * 无参构造方法

  5 */

  6 public Person()

  7 {

  8

  9 }

  10 /*

  11 * 有参构造方法

  12 */

  13 public Person(String a)

  14 {

  15 System.out.println("我是一个小写字母:"+a);

  16 }

  17 }

  调用构造函数:

  1 public class test {

  2

  3 /**

  4 * @param args

  5 */

  6 public static void main(String[] args) {

  7 // TODO Auto-generated method stub

  8 Person p1 = new Person();//隐式调用无参构造方法

  9 Person p2 = new Person("a");//调用有参构造方法

  10 //注意:调用了有参构造方法就不会调用无参构造方法了

  11 }

  12 }

  Static关键字

  特点:

  随着类的加载而加载

  优先于对象的存在

  被所有对象所共享

  可以直接被对类名调用

  它可以修饰方法、成员变量(全局变量),但是不能修饰构造方法。

  使用注意:

  静态方法只能访问静态成员,但是非静态方法可以访问静态成员

  静态方法中不可以使用this、super关键字

  没有使用static修饰的成员变量或方法称为----->实例成员

  使用static修饰的成员变量或方法称为----->类成员

  Static修饰的方法和成员变量即可以通过类名调用也可以通过实例调用

  没static修饰的方法和成员变量只能用实例来调用

  什么时候适合用static来修饰呢?

  一般在工具类写工具方法的时候使用

  例子:

  1 /*

  2 * 无参构造方法

  3 */

  4 public static Person() //这样是错误的,不能修饰构造方法

  5 {

  6 System.out.println("无参构造方法");

  7 }

  1 /*

  2 * 用static修饰成员变量,属于类成员

  3 */

  4 static String name; //姓名

  5 static String sex; //性别

  6 String address; //这个没有static修饰称为实例成员

  7 /*

  8 * 修饰方法,这个方法只能调用类成员

  9 */

  10 public static void eat()

  11 {

  12 name="小李";//正确

  13 address="天上人间"; //错误,不可调用实例成员

  14 System.out.println("吃饭");

  15 }

  16 /*

  17 * 实例成员

  18 */

  19 public void walk()

  20 {

  21 name="小李";//正确

  22 address="天上人间"; //正确

  23 System.out.println("走路");

  24 }

  调用:

  1 public class test {

  2

  3 /**

  4 * @param args

  5 */

  6 public static void main(String[] args) {

  7 // TODO Auto-generated method stub

  8 Person p = new Person();

  9 p.name="小明"; //实例调用类成员

  10 Person.name="小李";//类名调用类成员但不可调用实例成员

  11

  12 //还有个就是匿名对象调用,就是没有名字的实例对象

  13 System.out.println(new Person().address);

  14 }

  15 }