成员方法的分类:
类方法:有static修饰的成员方法,属于类:
成员方法:无static修饰的成员方法,属于对象。
Student类:
package cn.ensource.d2_staticmethod;
public class Student {
double score;
// 类方法
public static void printHelloWorld() {
System.out.println("Hello World");
System.out.println("Hello World");
}
// 实例方法
public void printPass() {
System.out.println("成绩:" + (score >= 60 ? "及格" : "不及格"));
}
}
Test测试类:
package cn.ensource.d2_staticmethod;
public class Test {
public static void main(String[] args) {
// 目标:掌握有无static修饰方法的用法
// 1. 类方法的用法
// 类名.类方法
Student.printHelloWorld();
// 对象.类方法(不推荐)
Student st = new Student();
st.printHelloWorld();
st.score = 80;
st.printPass();
// Student.printPass(); // 报错
}
}
执行原理:
实例方法是不允许使用类名调用。
类方法可以使用类名调,也可以使用实例调。
工具类的方法基本上全部都是static修饰的。
补充知识:搞懂main方法:
main方法怎么就能直接跑起来呢?
Java Test ---> Test.main() main方法是类方法。
参数:String[] args
如何把数据传给这个main方法的参数:
在Shell脚本中,就明白这个概念。
static修饰成员方法的应用场景:
类方法最常见的应用场景是做工具类。
工具类是什么?
工具类中的方法都是一些类方法,每个方法都是用来完成一个功能的,工具类是给开发人员共同使用的。
使用类方法设计工具类有什么好处呢?
1)提高了代码的复用性,调用方便,提高了开发效率。
工具类的方法都是类方法,每个类方法都是用来完成一个功能的。
案例:
两段代码存在重复代码。那就不是好的架构。
同学的讨论:
类方法可以集合到工具类中,而且不用创建对象就能调用。类方法可以用类名直接调用,不需要创建对象,使用起来非常方便。
工具类,类方法:
package cn.ensource.d3_util;
import java.util.Random;
public class MyUtil {
private MyUtil() {
}
public static String createCode(int n) {
String code = "";
String data = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
Random r = new Random();
for(int i = 0; i < n; i++) {
int index = r.nextInt(data.length());
code += data.charAt(index);
}
return code;
}
}
调用工具类中的类方法:
package cn.ensource.d3_util;
import java.util.Random;
public class LoginDemo {
public static void main(String[] args) {
System.out.println(MyUtil.createCode(4));;
}
}
package cn.ensource.d3_util;
import java.util.Random;
public class RegisterDemo {
public static void main(String[] args) {
System.out.println(MyUtil.createCode(6));
}
}
为什么工具类的方法要用类方法,而不用实例方法呢?
实例方法需要创建对象来调用的,此时对象只是为了调用方法,对象占用内存,这样会浪费内存。
类方法,直接使用类名调用,调用方便,也能节省内存。
多学一招:
工具类没有创建对象的需求,工具类不需要创建对象,建议将工具类的构造器进行私有。
Math 类:
工具类不让人创建对象,可以将构造器私有。
Math类的类方法:前面都有static:我们拿类名直接调用这种方法。
Static的注意事项:
使用类方法和实例方法时的几点注意事项:
类方法中可以直接访问类成员,不可以直接访问实例成员;
实例方法中即可以直接访问类成员,也可以直接访问实例成员(变量和方法);
实例方法中可以出现this关键字,类方法中不可以出现this关键字。
package cn.ensource._d4_static_attention;
public class Student {
static String schoolName; // 类变量
double score;
public static void printHelloWorld1() {
Student.schoolName = "黑马";
Student.printHelloWorld2();
// 类方法中不能访问实例变量、实例方法
// System.out.println(score);
// printPass();
// System.out.println(this);
}
public static void printHelloWorld2() {
System.out.println("Hello World");
System.out.println("Hello World");
}
// 实例方法
public void printPass() {
Student.schoolName = "黑马";
printHelloWorld2();
System.out.println(score);
printPass2();
System.out.println(this); //那取对象
}
public void printPass2() {
}
}
只要记住:类方法只能只能访问类成员。