开发者社区> 温柔的养猫人> 正文

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

简介: 本节简明赅要地指出了静态方法的一些使用场景与限制,并结合实际案例展示了一项static的用途。
+关注继续查看

上一篇:了解超然物外的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()) ;
    }
}

image.png
图一 执行结果一

这个时候对于程序而言方法就有了两种: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) ;
  }
}

image.png
图二 执行结果二

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

image.png
图三 执行结果三

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”) ;
}

image.png
图四 执行结果四

范例:实现属性的自动命名处理
如果现在传递了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()) ;
   }
}

image.png
图五 执行结果五

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
frame buffer编程--重新架构代码,实现动态效果
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/49493819 (一):写...
857 0
**关于PHP如何定义一个空对象(REST API如何处理空对象和空数组)
在写接口的过程当中,手机端有需求说不让返回json数组,要返回一个对象。 那么我们可以怎么做呢? 其实很简单,强制转换即可。 声明空对象: $empty_object=(object)array(); 或者 $empty_object=(object)null; 把数组转换为对象: ...
797 0
Java Data Access Object Pattern(数据访问对象模式)
数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。
774 0
.NET数据库编程求索之路--6.使用ADO.NET实现(三层架构篇-使用List传递数据-基于存储过程)(1)
6.使用ADO.NET实现(三层架构篇-使用List传递数据-基于存储过程)(1)    【 夏春涛 email: xchuntao@163.com  blog: http://www.cnblogs.
763 0
.NET数据库编程求索之路--5.使用ADO.NET实现(三层架构篇-使用List传递数据)(2)
5.使用ADO.NET实现(三层架构篇-使用List传递数据)(2)   作者:夏春涛 xchunta@163.com 转载请注明来源: http://www.cnblogs.com/SummerRain/archive/2012/07/26/2610945.
805 0
Haskell函数式编程之四-List操作
List在函数式语言中是一个重要的抽象,很多事情离了它就很难做到。函数式语言的鼻祖Lisp名称就来自List processing。 Haskell本身也给List操作提供了一系列的操作符以及库函数。
832 0
1172
文章
2
问答
来源圈子
更多
Java开发者成长课堂,课程资料学习,实战案例解析,Java工程师必备词汇等你来~
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载