java中的static关键字
程序员文章站
2022-04-03 17:14:30
...
java中的static关键字
1.类属性、类方法的设计思想
类属性作为该类各个对象之间共享的变量。 在设计类时, 分析 哪
些属性 不因对象的不同而改变 ,将这些属性设置为类属性。相应
的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常被声明为类方法,由
于不需要创建对象就可以调用类方法 ,从而简化了方法的调用。
2.static的使用
使用范围:
在Java类中,可用static修饰属性、方法、代码块、内部类
被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
访问权限允许时,可不创建对象,直接被类调用
class Circle {
private double radius;
public static String name = "这是一个圆";
public static String getName() {
return name;
}
public Circle(double radius) {
this.radius = radius;
}
public double findArea() {
return Math.PI * radius * radius;
}
public void display() {
System.out.println("name:" + name + "radius:" + radius);
}
}
public class StaticTest {
public static void main(String[] args) {
Circle c1 = new Circle(2.0);
Circle c2 = new Circle(3.0);
c1.display();
c2.display();
}
}
3.类变量
类变量(类属性)由该类的所有实例共享
class Person {
private int id;
public static int total = 0;
public Person() {
total++;
id = total;
}
public static void main(String args[]){
Person Tom=new Person();
Tom.id=0;
total=100; // 不用创建对象就可以访问静态成员
}
}
public class StaticDemo {
public static void main(String args[]) {
Person.total = 100; // 不用创建对象就可以访问静态成员
// 访问方式:类名. 类属性 , 类名. 类方法
System.out.println(Person.total);
Person c = new Person();
System.out.println(c.total); // 输出101
}}
4.类变量 vs 实例变量内存解析
5.类方法
没有对象的实例时,可以用 类名. 方法名()的形式访问由static修饰的类方法。
在static 方法内部只能访问类的 的static 修饰的属性或方法, 不能访问类的非 static 的结构。
因为不需要实例就可以访问static 方法,因此static 方法内部不能有this 。(也不能有super ? YES!)
static修饰的方法不能被重写
class Person {
private int id;
private static int total = 0;
public static void setTotalPerson(int total){
this.total=total; //非法,在static方法中不能有this,也不能有super
}
public Person() {
total++;
id = total;
}}
public class PersonTest {
public static void main(String[] args) {
Person.setTotalPerson(3);
} }
6.static的应用场景
属性是可以被多个对象所共享的,不会随着对象的不同而不同。
操作静态属性的方法,通常设置为static的
工具类中的方法,习惯上声明为static的。比如:Math,Arrays,Collections
推荐阅读
-
Java中是使用增强for的null问题
-
Java static关键字的重新思考
-
详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)
-
Java日期时间API系列5-----Jdk7及以前的日期时间类TimeUnit在并发编程中的应用
-
Java日期时间API系列12-----Jdk8中java.time包中的新的日期时间API类,日期格式化,常用日期格式大全
-
php中static静态变量的使用方法详解
-
Java中Date()类 日期转字符串、字符串转日期的问题
-
关于java学习中的一些易错点(基础篇)
-
详解Java中的final关键字
-
JAVA中4种解析XML文件的方法