static关键字

概念

是java中的一个关键字
用于修饰成员(成员变量和成员方法)

特点

  1. 可以用来修饰成员变量与方法,被static修饰的资源称作静态资源
  2. 静态资源随着类的加载而加载,优先于对象进行加载
  3. 静态在原可以被类名直接调用,没有创建对象也可以调用
  4. 静态资源被全局所有对象共享,只有一份

    示例

    ```java package cn.tedu.oopstatic;

/**

  • 用于练习static的入门案例 */

public class TestStatic { public static void main(String[] args) { / 使用类名可以直接调用静态资源 静态资源优先于对象进行加载的,随着类的加载而加载 比对象先加载进入内存,所以可以不同过对象直接使用类名调用静态资源 静态资源被全局所有对象共享,只有一份 / System.out.println(Student.name); Student.study();

  1. Student s = new Student();
  2. s.name = "埼玉";
  3. s.sno = 2015;
  4. System.out.println(s.name);
  5. System.out.println(s.sno);
  6. Student s1 = new Student();
  7. System.out.println(s1.name);
  8. System.out.println(s1.sno);
  9. s1.name = "杰诺斯";
  10. System.out.println(s.name);
  11. System.out.println(s1.name);
  12. /*
  13. s.study();
  14. System.out.println(s.name);
  15. */
  16. }

}

class Student{

  1. /*
  2. static:静态
  3. 可以把普通资源修饰为静态资源
  4. */
  5. static String name;//将普通成员变量修饰为静态成员变量
  6. int sno;
  7. int age;
  8. String gender;
  9. //将普通方法修饰为静态普通方法,一般写在修饰符之后
  10. public static void study(){
  11. System.out.println("每天至少保证24小时充足的学习时间");
  12. }
  13. public void speak(){
  14. System.out.println("会就会,为什么要说");
  15. }

}

  1. <a name="VfAs5"></a>
  2. ## 注意
  3. <a name="jQsky"></a>
  4. ### 静态的调用关系
  5. 1. _非静态资源可以调用静态资源_
  6. 1. _静态资源可以调用静态资源_
  7. 1. _静态资源不可以调用非静态资源_
  8. <a name="pYt9H"></a>
  9. # 代码块
  10. <a name="wWREN"></a>
  11. ## 静态代码块
  12. _位置:类里方法外<br />执行时机:静态代码块也属于类资源,随着类的加载而加载,优先于对象先加载,只加载一次,创建多个对象也只执行一次<br />作用:用于加载一些需要第一时间进行加载的且只加载一次的资源,一般用于项目的初始化_
  13. <a name="QUcbP"></a>
  14. ## 构造代码块
  15. _位置:类里方法外_<br />_执行时机:创建对象时被处罚,优先于构造方法执行,创建几个对象就加载几次_<br />_作用:用于提取所有构造方法的共性功能_
  16. <a name="IbdgG"></a>
  17. ## 局部代码块
  18. _位置:方法里_<br />_执行实际:调用本代码块所处的方法时才会执行_<br />_作用:用于限制变量作用范围,作用范围越小越好_
  19. <a name="tFCIN"></a>
  20. ## 执行顺序
  21. 静态代码块->构造代码块->构造方法(创建对象时调用)->局部代码块
  22. <a name="fPPSF"></a>
  23. # final
  24. <a name="VkDuG"></a>
  25. ## 概念
  26. 1. 是java提供的一个关键字
  27. 1. final是最终的意思
  28. 1. final可以修饰类,方法,成员变量
  29. 初衷:java出现继承后,子类可以更改父类的功能,当父类功能不许子类改变时,可以利用final关键字修饰父类。
  30. <a name="i9Gsz"></a>
  31. ## 特点
  32. 1. 被final修饰的类,被修饰的类为最终类,不能被继承
  33. 1. 被final修饰的方法,被修饰的方法为最终方法,不能被重写
  34. 1. 被final修饰的变量是个常量,常量值不能被改变
  35. 1. 常量的定义形式:final 数据类型 常量名 = 值,常量必须要初始化即赋值;
  36. <a name="s2pME"></a>
  37. ## 示例
  38. ```java
  39. package cn.tedu.oop;
  40. /**
  41. * 用于final入门案例
  42. */
  43. public class TestFinal {
  44. public static void main(String[] args) {
  45. Father f = new Father();
  46. Son s = new Son();
  47. f.rain();
  48. s.rain("长安");
  49. }
  50. }
  51. /*
  52. final
  53. 可以用来修饰类,被修饰的类不可以被继承,
  54. 被修饰的类没有子类,代表自己就是最终类
  55. final class Father{}会报错,子类不能继承一个final的父类
  56. */
  57. class Father{
  58. /*
  59. 使用final修饰常量
  60. final修饰的不是变量,而是常量,
  61. 常量的值不可以被修改,所以在定义时必须给常量赋值否则会报错
  62. */
  63. final String name = "西安";
  64. /*
  65. 使用final修饰符类的方法
  66. final可以修饰父类的方法
  67. 被final修饰的方法,表示方法的最终实现,不可被重写
  68. */
  69. final public void rain(){
  70. //name = "洛阳";报错,常量的值不可以被修改
  71. System.out.println(name + "的");
  72. System.out.println("狂风暴雨");
  73. }
  74. }
  75. class Son extends Father{
  76. public void rain(String a){
  77. System.out.println(a + "惠风和畅,天朗气清");
  78. }
  79. }