最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Java基础知识回顾之static修饰方法

XAMPP下载 admin 1166浏览 0评论
 static 修饰方法
没有实例化类时,调用 static 方法
Test.java

class Book{

// 设置一个默认的值
private static String pub = “清华大学出版社”;

// Book 类正常的属性
private String title;
private double price;

// Book 的构造类
public Book(String title, double price) {
this.title = title;
this.price = price;
}

public static void setPub(String p){
// 这里不能使用 this.pub = p, 使用 eclipse 工具的时候,会提示  Cannot use this in a static context
// 因为 static 声明的属性是不受对象的控制的
pub = p;
}

// 获取 Book 的信息
public void getInfo(){
System.out.println(“图书名称:”+ this.title + “,价格为:”+ this.price + “,出版社为:”+ this.pub );
}
}

public class Test {

public static void main(String[] args) {

// 在没有实例化对象时,调用static的方法
Book.setPub(“人民日报出版社”);

Book book1 = new Book(“Android开发实战”, 69.8);
Book book2 = new Book(“Java EE开发实战”, 49.8);
Book book3 = new Book(“Java 开发教程”, 79.8);

// 在没有设置 pub 属性的情况下输出
book1.getInfo();
book2.getInfo();
book3.getInfo();
}
}
控制台输入出

图书名称:Android开发实战,价格为:69.8,出版社为:人民日报出版社
图书名称:Java EE开发实战,价格为:49.8,出版社为:人民日报出版社
图书名称:Java 开发教程,价格为:79.8,出版社为:人民日报出版社
我们可以看出来,用 static 声明的方法和 static 声明的属性都不受对象的控制,即可以不用实例化对象就可以调用。

static 方法调用非 static方法或者属性(错误的调用)
以下的操作都在 eclipse 下面进行的。报错的提示在代码的注释上面。

 class Book{

// 设置一个默认的值
private static String pub = “清华大学出版社”;

// Book 类正常的属性
private String title;
private double price;

// Book 的构造类
public Book(String title, double price) {
this.title = title;
this.price = price;
}

public static void setPub(String p){
// 这里不能使用 this.pub = p, 使用 eclipse 工具的时候,会提示  Cannot use this in a static context
pub = p;

//如果是使用 this.title = “title” 或者 调用 this.getInfo(),就会报错: Cannot use this in a static context
this.title = “title”;

// 如果是 title = “title”
// 就会报错:Cannot make a static reference to the non-static field title,并且提示 将 title 修为 static
title = “title”;

// 如果是直接调用 getInfo()
// 就会报错 Cannot make a static reference to the non-static method getInfo() from the type Book, 并且提示 将 getInfo() 修为 static 方法
getInfo();
}

// 获取 Book 的信息
public void getInfo(){
System.out.println(“图书名称:”+ this.title + “,价格为:”+ this.price + “,出版社为:”+ this.pub );
}
}
非 static 方法调用 static 方法或者属性
在上面的例子我们发现,在static 方法中有特别多的限制,但是在非static中,调用 static 属性或者方法呢?

Test.java

class Book{

// 设置一个默认的值
private static String pub = “清华大学出版社”;

// Book 类正常的属性
private String title;
private double price;

// Book 的构造类
public Book(String title, double price) {
this.title = title;
this.price = price;
}

public static void setPub(String p){
pub = p;
}

// 获取 Book 的信息
public void getInfo(){

// 调用static 方法
setPub(“北京大学”);

// 在打印输出的时,调用 static属性
System.out.println(“图书名称:”+ this.title + “,价格为:”+ this.price + “,出版社为:”+ pub );
}
}

public class Test {

public static void main(String[] args) {

Book book1 = new Book(“Android开发实战”, 69.8);
Book book2 = new Book(“Java EE开发实战”, 49.8);
Book book3 = new Book(“Java 开发教程”, 79.8);

// 在没有设置 pub 属性的情况下输出
book1.getInfo();
book2.getInfo();
book3.getInfo();
}
}
控制台输出

图书名称:Android开发实战,价格为:69.8,出版社为:北京大学
图书名称:Java EE开发实战,价格为:49.8,出版社为:北京大学
图书名称:Java 开发教程,价格为:79.8,出版社为:北京大学
static 方法 与 非 static 方法的区别
static 方法不能直接方法 非 static 属性或者方法。只能调用 static属性或者方法。
非 static 属性或者方法可以方法任何的static 方法或者属性,不受任何限制。
通过几个例子来说明
我们在一个类中调用 static 方法的时候,可以直接调用 static方法。但是对于,非static 方法,我们必须要实例化对象,才能调用。

public class Test {

public static void print() {
System.out.println(“测试static 方法”);
}

public void printStr() {
System.out.println(“测试非 static 方法”);
}

public static void main(String[] args) {
print();

// 对于非static,我们必须要实例化对象了才能调用
new Test().printStr();
}
}
我们在开发中,经常会使用到工具类,我们的工具类一般都是按照如下定义的,在这个类中机会所有的方法都是 static 的,调用的时候就通过 Utils.方法名 直接调用。

class Utils {

public static int int2Str(String str) {
return Integer.valueOf(str);
}

public static int add(int x, int y) {
return x+y;
}
}

public class Test {

public static void main(String[] args) {
System.out.println( Utils.add(0, 1) );
}
}
分析
所有 非static 定义的结构,必须在类已经明确的产生了实例化堆空间,才可以使用。
所有的 static 定于的结构不受实例化对象的控制。即:在没有实例化对象的时候访问。

转载请注明:XAMPP中文组官网 » Java基础知识回顾之static修饰方法

您必须 登录 才能发表评论!