Java中static关键字-面向对象-Java基础学习(二十一)

 

概念

static:静态的,可以用来修饰属性、方法、*代码块(或初始化块)、*内部类

static修饰属性(类变量):

1.由类创建的所有的对象,都共用这一个属性

2.当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。vs 实例变量(非static修

的属性,各个对象各自拥有一套副本)

3.类变量随着类的加载而加载的,而且独一份

4.静态的变量可以直接通过“类.类变量”的形式来调用

5.类变量的加载是要早于对象。所以当有对象以后,可以“对象.类变量”使用。但是"类.实例变量"是不

行的。

6.类变量存在于静态域中。

static修饰方法(类方法):

1.随着类的加载而加载,在内存中也是独一份

2.可以直接通过“类.类方法”的方式调用

3.内部可以调用静态的属性或静态的方法,而不能调用非静态的属性或方法。反之,非静态的方法是可

以调用静态的属性或静态的方法

静态的方法内是不可以有this或super关键字的!

 

注:静态的结构(static的属性、方法、代码块、内部类)的生命周期要早于非静态的结构,同时被回收也

要晚于非静态的结构

 

static修饰代码块

static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,

它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按

照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

 

例题解析

  1. public class TestCircle {
  2. public static void main(String[] args) {
  3. Circle c1 = new Circle();
  4. Circle c2 = new Circle(2.3);
  5. System.out.println(c1);
  6. System.out.println(c2);
  7. System.out.println(Circle.getTotal());
  8. }
  9. }
  10. class Circle{
  11. private double radius;
  12. private static String info = "我是一个圆";
  13. private int id;//编号
  14. private static int init = 1001;//控制每个对象的id
  15. private static int total = 0;//记录创建了多少个对象
  16. public Circle(){
  17. this.id = init++;
  18. total++;
  19. }
  20. public Circle(double radius){
  21. this.radius = radius;
  22. this.id = init++;
  23. total++;
  24. }
  25. public double getRadius() {
  26. return radius;
  27. }
  28. public void setRadius(double radius) {
  29. this.radius = radius;
  30. }
  31. public static String getInfo() {
  32. return info;
  33. }
  34. public static void setInfo(String info) {
  35. Circle.info = info;
  36. }
  37. public int getId() {
  38. return id;
  39. }
  40. public void setId(int id) {
  41. this.id = id;
  42. }
  43. public static int getTotal() {
  44. return total;
  45. }
  46. public static void setTotal(int total) {
  47. Circle.total = total;
  48. }
  49. @Override
  50. public String toString() {
  51. return "Circle [radius=" + radius + ", id=" + id + "]";
  52. }
  53. public static void show(){
  54. System.out.println(Circle.info);
  55. }
  56. public void desc(){
  57. System.out.println(this.info);
  58. }
  59. }
weinxin
我的微信
有问题微信找我
DannyWu

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: