java 静态相关内容

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口。
两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的.

静态方法 
(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2)

使用类的静态方法时,注意:
a.在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
b.静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生(this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用)。

(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如: 
fun() 

   static int i=0;//非法。 

(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如:
static 


(4)非静态代码块

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口。
两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的.

静态方法 
(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2)

使用类的静态方法时,注意:
a.在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
b.静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生(this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用)。

(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如: 
fun() 

   static int i=0;//非法。 

(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如:
static 


(4)非静态代码块 

[java] view plain copy

  1. public class TestStaticCon {
  2. 1.     public static int a = 0;
  3. 2.
  4. 3.     static {
  5. 4.         a = 10;
  6. 5.         System.out.println("父类的非静态代码块在执行a=" + a);
  7. 6.     }
  8. 7.
  9. 8.     {
  10. 9.         a = 8;
  11. 10.         System.out.println("父类的非静态代码块在执行a=" + a);
  12. 11.     }
  13. 12.
  14. 13.     public TestStaticCon() {
  15. 14.         this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法
  16. 15.         System.out.println(a);
  17. 16.         System.out.println("父类无参构造方法在执行a=" + a);
  18. 17.     }
  19. 18.
  20. 19.     public TestStaticCon(String n) {
  21. 20.         System.out.println(n);
  22. 21.         System.out.println(a);
  23. 22.
  24. 23.     }
  25. 24.
  26. 25.     public static void main(String[] args) {
  27. 26.         TestStaticCon tsc = null;
  28. 27.         System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  29. 28.         tsc = new TestStaticCon();
  30. 29.     }/*Output:
  31. 30.            父类的非静态代码块在执行a=10
  32. 31.            !!!!!!!!!!!!!!!!!!!!!
  33. 32.            父类的非静态代码块在执行a=8
  34. 33.            a在父类带参构造方法中的值:10
  35. 34.            8
  36. 35.            8
  37. 36.            父类无参构造方法在执行a=8
  38. 37.            */
  39. 38.
  40. 39. }
  41. public class TestStaticCon {
  42. 1.     public static int a = 0;
  43. 2.
  44. 3.     static {
  45. 4.         a = 10;
  46. 5.         System.out.println("父类的非静态代码块在执行a=" + a);
  47. 6.     }
  48. 7.
  49. 8.     {
  50. 9.         a = 8;
  51. 10.         System.out.println("父类的非静态代码块在执行a=" + a);
  52. 11.     }
  53. 12.
  54. 13.     public TestStaticCon() {
  55. 14.         this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法
  56. 15.         System.out.println(a);
  57. 16.         System.out.println("父类无参构造方法在执行a=" + a);
  58. 17.     }
  59. 18.
  60. 19.     public TestStaticCon(String n) {
  61. 20.         System.out.println(n);
  62. 21.         System.out.println(a);
  63. 22.
  64. 23.     }
  65. 24.
  66. 25.     public static void main(String[] args) {
  67. 26.         TestStaticCon tsc = null;
  68. 27.         System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  69. 28.         tsc = new TestStaticCon();
  70. 29.     }/*Output:
  71. 30.            父类的非静态代码块在执行a=10
  72. 31.            !!!!!!!!!!!!!!!!!!!!!
  73. 32.            父类的非静态代码块在执行a=8
  74. 33.            a在父类带参构造方法中的值:10
  75. 34.            8
  76. 35.            8
  77. 36.            父类无参构造方法在执行a=8
  78. 37.            */
  79. 38.
  80. 39. }

[java] view plain copy

  1. public class TestStaticCon {
  2. public static int a = 0;
  3. static {
  4. a = 10;
  5. System.out.println("父类的非静态代码块在执行a=" + a);
  6. }
  7. {
  8. a = 8;
  9. System.out.println("父类的非静态代码块在执行a=" + a);
  10. }
  11. public TestStaticCon() {
  12. this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法
  13. System.out.println(a);
  14. System.out.println("父类无参构造方法在执行a=" + a);
  15. }
  16. public TestStaticCon(String n) {
  17. System.out.println(n);
  18. System.out.println(a);
  19. }
  20. public static void main(String[] args) {
  21. TestStaticCon tsc = null;
  22. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  23. tsc = new TestStaticCon();
  24. }/*Output:
  25. 父类的非静态代码块在执行a=10
  26. !!!!!!!!!!!!!!!!!!!!!
  27. 父类的非静态代码块在执行a=8
  28. a在父类带参构造方法中的值:10
  29. 8
  30. 8
  31. 父类无参构造方法在执行a=8
  32. */
  33. }

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口。
两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的.

静态方法 
(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2)

使用类的静态方法时,注意:
a.在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
b.静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生(this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用)。

(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如: 
fun() 

   static int i=0;//非法。 

(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如:
static 


(4)非静态代码块 

[java] view plain copy

  1. public class TestStaticCon {
  2. 1.     public static int a = 0;
  3. 2.
  4. 3.     static {
  5. 4.         a = 10;
  6. 5.         System.out.println("父类的非静态代码块在执行a=" + a);
  7. 6.     }
  8. 7.
  9. 8.     {
  10. 9.         a = 8;
  11. 10.         System.out.println("父类的非静态代码块在执行a=" + a);
  12. 11.     }
  13. 12.
  14. 13.     public TestStaticCon() {
  15. 14.         this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法
  16. 15.         System.out.println(a);
  17. 16.         System.out.println("父类无参构造方法在执行a=" + a);
  18. 17.     }
  19. 18.
  20. 19.     public TestStaticCon(String n) {
  21. 20.         System.out.println(n);
  22. 21.         System.out.println(a);
  23. 22.
  24. 23.     }
  25. 24.
  26. 25.     public static void main(String[] args) {
  27. 26.         TestStaticCon tsc = null;
  28. 27.         System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  29. 28.         tsc = new TestStaticCon();
  30. 29.     }/*Output:
  31. 30.            父类的非静态代码块在执行a=10
  32. 31.            !!!!!!!!!!!!!!!!!!!!!
  33. 32.            父类的非静态代码块在执行a=8
  34. 33.            a在父类带参构造方法中的值:10
  35. 34.            8
  36. 35.            8
  37. 36.            父类无参构造方法在执行a=8
  38. 37.            */
  39. 38.
  40. 39. }
  41. public class TestStaticCon {
  42. 1.     public static int a = 0;
  43. 2.
  44. 3.     static {
  45. 4.         a = 10;
  46. 5.         System.out.println("父类的非静态代码块在执行a=" + a);
  47. 6.     }
  48. 7.
  49. 8.     {
  50. 9.         a = 8;
  51. 10.         System.out.println("父类的非静态代码块在执行a=" + a);
  52. 11.     }
  53. 12.
  54. 13.     public TestStaticCon() {
  55. 14.         this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法
  56. 15.         System.out.println(a);
  57. 16.         System.out.println("父类无参构造方法在执行a=" + a);
  58. 17.     }
  59. 18.
  60. 19.     public TestStaticCon(String n) {
  61. 20.         System.out.println(n);
  62. 21.         System.out.println(a);
  63. 22.
  64. 23.     }
  65. 24.
  66. 25.     public static void main(String[] args) {
  67. 26.         TestStaticCon tsc = null;
  68. 27.         System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  69. 28.         tsc = new TestStaticCon();
  70. 29.     }/*Output:
  71. 30.            父类的非静态代码块在执行a=10
  72. 31.            !!!!!!!!!!!!!!!!!!!!!
  73. 32.            父类的非静态代码块在执行a=8
  74. 33.            a在父类带参构造方法中的值:10
  75. 34.            8
  76. 35.            8
  77. 36.            父类无参构造方法在执行a=8
  78. 37.            */
  79. 38.
  80. 39. }

[java] view plain copy

  1. public class TestStaticCon {
  2. public static int a = 0;
  3. static {
  4. a = 10;
  5. System.out.println("父类的非静态代码块在执行a=" + a);
  6. }
  7. {
  8. a = 8;
  9. System.out.println("父类的非静态代码块在执行a=" + a);
  10. }
  11. public TestStaticCon() {
  12. this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法
  13. System.out.println(a);
  14. System.out.println("父类无参构造方法在执行a=" + a);
  15. }
  16. public TestStaticCon(String n) {
  17. System.out.println(n);
  18. System.out.println(a);
  19. }
  20. public static void main(String[] args) {
  21. TestStaticCon tsc = null;
  22. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  23. tsc = new TestStaticCon();
  24. }/*Output:
  25. 父类的非静态代码块在执行a=10
  26. !!!!!!!!!!!!!!!!!!!!!
  27. 父类的非静态代码块在执行a=8
  28. a在父类带参构造方法中的值:10
  29. 8
  30. 8
  31. 父类无参构造方法在执行a=8
  32. */
  33. }

时间: 2024-12-11 18:27:22

java 静态相关内容的相关文章

java并发相关内容

1. vilatile,锁和原子操作 这三个是理解java并发的基础. 简单来说,vilatile修饰的变量,可以保证对其的改变所有线程可见,这个机制实际上也是依赖原子操作的: 锁,主要分为偏向锁,轻量级锁和重量级锁:资源消耗也是越来越大的.使用java的synchronized的关键字或者新的锁用法,都是在这三种锁中做选择,jdk6之后默认优先使用偏向锁,也可以通过UseBaisedLocking=false关闭偏向锁.使用偏向锁的依据,一个是客观事实,通常都是同一个线程获取锁:另一个也是考量

Java面试题,Java虚拟机相关内容面试题及答案

McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个线程?跟虚拟机开发商有关么?跟操作系统呢?还有其他的因素吗? 其实这取决于你使用的CPU,操作系统,其他进程正在做的事情,你使用的Java的版本,还有其他的因素.我曾经见过一台Windows服务器在宕机之前有超过6500个线程.当然,大多数线程什么事情也没有做.一旦一台机器上有差不多6500个线程(Java里面),机器就会开始出问题,并变得不稳定. 以我的经验来看,JVM容纳的线程与计算机本身性

Java Reflection 相关及示例

Java Reflection 相关及示例 前言: 代码有点长.贴出github地址:https://github.com/andyChenHuaYing/scattered-items/tree/master/items-java-reflection 测试目标类:TargetClass.自定义的辅助类比较多.在这里不贴了.篇幅有限.并且测试也简单.因此测试类也没有提及. 一:简介 Java Reflection是针对Class也就是我们平常说的类而言的.用于操作Java中的Class.在Ja

Java4Android之静态相关

在这一节,我希望把跟Java Static相关的知识点全部涉及到,至少看完本帖的时候,你对Java 静态的了解能够让你在茶余饭后能够与其他程序员聊上一会. Java中的静态主要分为:静态成员变量,静态成员函数,静态代码段,静态类.我们一个个娓娓道来. 本文的组织如下,首先,我们说明静态和非静态的区别:然后我们具体一个个的去讲上述静态相关知识点. 1,静态对象与非静态对象的区别 静态和非静态的区别对比见下表 比较项目 静态 非静态 拥有属性  是类共同拥有的   是类各对象独立拥有的 内存分配 内

第一天上午——HTML网页基础知识以及相关内容

今天上午学习了HTML基础知识以及相关内容,还有DW的基本使用方法. HTML(HyperText Markup Language):超文本标记语言,超文本:网页中除了包含文本文字之外,还包含了图片,音频,视频等多媒体,所以叫超文本.之所以是标记语言,是因为网页的内容基本都是有一个个标签构成的 首先,是HTML语言和其他语言的对比. HTML:解析执行,逻辑性不强,标签较多,不需要搭建环境.浏览器解析代码,根据源代码从上到下一句一句执行. C等其他语言:编译执行,逻辑性强,需要搭建环境. 然后,

面试总结(一)——Java基础相关知识

面试总结(一)--Java基础相关知识 最近在面试,所以总结下面试容易问到的知识点,用来备份查看用. 若需转载,请注明出处. 1.面向对象的特点: 1.将复杂的事情简单化 2.面向对象将以前过程中的执行者,变成了指挥者 3.面向对象思想是符合人们思考习惯的思想 2.面向对象特征: 1.封装:隐藏对象的属性和实现的细节,仅对外提供公共访问方式 好处:将变化隔离,便于使用,提高复用和安全性. 原则:将不需要对外提供的内容隐藏起来,隐藏属性,提供公共方法对其访问. 2.继承:提高代码复用性,继承是多态

Java 静态代理和动态代理

Java 静态代理 静态代理通常用于对原有业务逻辑的扩充.比如持有二方包的某个类,并调用了其中的某些方法.然后出于某种原因,比如记录日志.打印方法执行时间,但是又不好将这些逻辑写入二方包的方法里.所以可以创建一个代理类实现和二方方法相同的方法,通过让代理类持有真实对象,然后在原代码中调用代理类方法,来达到添加我们需要业务逻辑的目的. 这其实也就是代理模式的一种实现,通过对真实对象的封装,来实现扩展性. 一个典型的代理模式通常有三个角色,这里称之为**代理三要素** 共同接口 public int

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.

常用 Java 静态代码分析工具的分析与比较

转载自: http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代