了解超然物外的static-方法篇 | 带你学《Java面向对象编程》之十一

上一篇:了解超然物外的static-属性篇 | 带你学《Java面向对象编程》之十
【本节目标】
通过学习本节,你将了解到普通方法与static方法的区别,进一步理解使用static修饰方法或属性的时机,学会使用static灵活处理一些实际场景。

static定义方法

static关键字也可以进行方法的定义,static方法的主要特点在于,其可以直接由类名称在没有是实例化对象的情况下进行调用。
范例:定义static方法

class person {             //创建所有同一个国家的类
   private String name ;
   private int age ;
   private static String country = “中华民国” ;      
   public Person(String name ,int age ){
       this.name = name ;
       this.age = age ;
   }
   public static void setCountry(String c) {     //static方法
       country = c ;
//setter、getter略
   public String getInfo() {
       return  “姓名:” + this.name + “、年龄:” +this.age + “、国家:” +this.country + ;
   }
}
public class JavaDemo {          
    public static void main(String args[]) {
        Person.setCountry(“*”)
        Person per = new Person(“张三”,10) ;
        System.out.println(per.getInfo()) ;
    }
}

了解超然物外的static-方法篇   | 带你学《Java面向对象编程》之十一
图一 执行结果一

这个时候对于程序而言方法就有了两种:static方法、非static方法。
这两个方法之间在调用上就有了限制。

  • static方法只允许调用static属性或static方法;
  • 非static方法允许调用static属性或static方法;

所有的static定义的属性和方法都可以在没有实例化对象的前提下使用,而所有的非static定义的属性和方法必须要有实例化对象的情况下才可以使用。
如果说可以理解这个限制(this.),那么对于之前的方法定义就可以得出新的结论:在最早讲解方法定义的时候强调过:“当前定义的方法都是在主类中定义的,并且由主方法调用的”。

public class JavaDemo {          
    public static void main(String args[]) {
        print() ;
}
    public static void print(){
       System.out.println(www.mldn.cn) ;
  }
}

了解超然物外的static-方法篇   | 带你学《Java面向对象编程》之十一
图二 执行结果二

public class JavaDemo {          
    public static void main(String args[]) {
        new JavaDemo().print() ;
}
    public void print(){
        System.out.println(www.mldn.cn) ;
 }
}

了解超然物外的static-方法篇   | 带你学《Java面向对象编程》之十一
图三 执行结果三

static 定义的方法或者是属性都不是你代码编写之初所需要考虑的内容,只有在回避实例化对象调用并且描述公共属性的情况下才会考虑使用static定义的方法或者是属性。

static应用

为了加强理解,下面做两个简单的程序来进行static应用的提示。
范例:编写一个程序类,这个类可以实现实例化对象个数的统计,每一次创建新的实例化对象都可以实现一个统计操作。
此时可以单独创建一个static属性,因为所有对象都共享同一个static属性,那么在构造方法中可以实现数据的统计处理。

class Book {
private String title ;
private static int count = 0 ;
public Book(String title) {
    this.title = title ;
    count ++ ;
    System.out.println(“第” + count + ”本新的图书创建出来。”)
}
}

public class JavaDemo {
  public static void main(String args[]) {
  new Book(“Java”) ;
  new Book(“JSP”) ;
  new Book(“Sping”) ;
}

了解超然物外的static-方法篇   | 带你学《Java面向对象编程》之十一
图四 执行结果四

范例:实现属性的自动命名处理
如果现在传递了title属性,就使用传递的属性内容,而如果没有传递title属性,则自动采用“NOTITLE-编号”的形式进行该属性内容。

class Book {
   private String title ;
   private static int count = 0 ;
   public Book() {
      this(“NOTITLE - ”+ count ++)
   }
   public Book(String title) {
      this.title = title ;
      count ++ ;
   }
   public String getTitle() {
      return this.title ;
   }
}
public class JavaDemo {
    public static void main(String args[]) {
        System.out.println(new Book(“Java”).getTitle()) ;
        System.out.println(new Book(“JSP”).getTitle()) ;
        System.out.println(new Book(“Sping”).getTitle()) ;
        System.out.println(new Book().getTitle()) ;
        System.out.println(new Book().getTitle()) ;
   }
}

了解超然物外的static-方法篇   | 带你学《Java面向对象编程》之十一
图五 执行结果五

这样处理的好处是可以避免在没有设置title属性时内容为null的重复问题。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:千字掌握“代码块”概念 | 带你学《Java面向对象编程》之十二
更多Java面向对象编程文章查看此处

上一篇:MySQL · 引擎特性 · MySQL内核对读写分离的支持


下一篇:注册表对比工具(Regshot) V2.0.1 中文绿色版