static 小知识总结

news/2024/7/4 13:24:30

静态:static————————

/*

静态:static。

用法:是一个修饰符,用于修饰成员(成员变量,成员函数).

              当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,

              还可以直接被类名调用,格式——类名.静态成员。

 

static特点:

1,随着类的加载而加载。

   也就说:静态会随着类的消失而消失。说明它的生命周期最长。

2,优先于的对象存在

       明确一点:静态是先存在。对象是后存在的。

3,被所有对象所共享static String country = "CN";//被所有对象所共享

4,可以直接被类名所调用。//System.out.println(Person.country);//可以直接被类名所调用

 

静态使用注意事项:

1,静态方法只能访问静态成员。

       非静态方法既可以访问静态也可以访问非静态。

2,静态方法中不可以定义thissuper关键字。

       因为静态优先于对象存在。this是个引用,哪个对象调用方法就引用哪个对象。 而静态方法有可能不是被对象调用     的,this无从引用。

       所以静态方法中不可以出现this。

3,主函数是静态的。

      

静态有利有弊

利处:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。

         可以直接被类名调用。

弊端:生命周期过长。

         访问出现局限性。(静态虽好,只能访问静态。)

              如果要在静态方法内部访问外部非静态成员,需要先创建该类对象,通过对象访问。

 

实例变量和类变量的区别:

1,存放位置。

              类变量随着类的加载而存在于方法区中。在类加载后就初始化。

              实例变量随着对象的建立而存在于堆内存中。

2,生命周期:

       类变量生命周期最长,随着类的消失而消失。

       实例变量生命周期随着对象的消失而消失。

                     String name;//成员变量,实例变量。

                     static String country = "CN";//静态的成员变量,类变量。被所有对象所共享

 

Static的使用——————

/*

什么使用静态?

要从两方面下手:因为静态修饰的内容有成员变量和函数。

             

1、什么时候定义静态变量(类变量)呢?

当对象中出现共享数据时,该数据被静态所修饰。

对象中的特有数据要定义成非静态存在于堆内存中。

2、什么时候定义静态函数呢?

当功能内部没有访问到非静态数据(对象的特有数据),

那么该功能可以定义成静态的。

 

/*

 

静态的应用——————

每一个应用程序中都有共性的功能,

可以将这些功能进行抽取,独立封装。

以便复用。

 

虽然可以通过建立ArrayTool的对象使用这些工具方法,对数组进行操作。

发现了问题:

1,对象是用于封装数据的,可是ArrayTool对象并未封装特有数据。

2,操作数组的每一个方法都没有用到ArrayTool对象中的特有数据。

 

这时就考虑,让程序更严谨,是不需要对象的。

可以将ArrayTool中的方法都定义成static的。直接通过类名调用即可。

将方法都静态后,可以方便于使用,但是该类还是可以被其他程序建立对象的。

为了更为严谨,强制让该类不能建立对象。

可以通过将构造函数私有化完成。

 

接下来,将ArrayTool.class文件发送给其他人,其他人只要将该文件设置到classpath路径下,就可以使用该工具类。

但是,很遗憾,该类中到底定义了多少个方法,对方去不清楚。因为该类并没有使用说明书。

开始制作程序的说明书。java的说明书通过文档注释来完成。

*/

/**

这是一个可以对数组进行操作的工具类,该类中提供了,获取最值,排序等功能。

@author 张三

@version V1.1

 

*/

//javadoc -d myhelp -author -version ArrayTool.java

主函数————————

/*

public static void main(String[ ] args)

 

主函数:是一个特殊的函数。作为程序的入口,可以被jvm调用。

主函数的定义:

       public:代表着该函数访问权限是最大的。

       static:代表主函数随着类的加载就已经存在了。

       void:主函数没有具体的返回值。

       main:不是关键字,但是是一个特殊的单词,可以被jvm识别。

       (String[] arr ):函数的参数,参数类型是一个数组,该数组中的元素是字符串。字符串类型的数组

主函数是固定格式的:jvm识别。

jvm在调用主函数时,传入的是new String[0];

*/

静态代码块————

格式:

static

{

       静态代码块中的执行语句。

}

 

特点:随着类的加载而执行,只执行一次,并优先于主函数执行。

用于给类进行初始化的。

例子:

复制代码
 1 class StaticCode
 2 
 3 {
 4 
 5        static
 6 
 7        {
 8 
 9               System.out.println("a");
10 
11        }
12 
13       
14 
15 class StaticCodeDemo
16 
17 {
18 
19        static
20 
21        {
22 
23               System.out.println("b");
24 
25        }
26 
27        public static void main(String[] args)
28 
29        {
30 
31               new StaticCode();
32 
33               new StaticCode();
34 
35               System.out.println("over");
36 
37        }
38 
39        static
40 
41        {
42 
43               System.out.println("c");
44 
45        }
46 
47 }
48 
49 //d:\>java0217\day06>java StaticCodeDemo
50 
51 //输出结果:
52 
53                      b
54 
55                      c
56 
57                      a
58 
59                      over
复制代码



 

例子2

 

复制代码
 1 class StaticCode
 2 
 3 {
 4 
 5        int num = 9;
 6 
 7 //********************类型一***************************
 8 
 9        StaticCode()//因为没有创建与之对应的对象,所以不打印
10 
11        {
12 
13               System.out.println("b");
14 
15        }
16 
17 //********************类型二***************************
18 
19        static//静态代码块,给类初始化。
20 
21        {
22 
23               System.out.println("a");//静态只能访问静态,不能System.out.println("a"+this.num);
24 
25        }
26 
27 //********************类型三***************************  
28 
29        {
30 
31               System.out.println("c"+this.num);//构造代码块,给对象初始化。
32 
33        }
34 
35 //********************类型四***************************
36 
37        StaticCode(int x)//构造函数,给对应对象初始化
38 
39        {
40 
41               System.out.println("d");
42 
43        }
44 
45       
46 
47        public static void show()
48 
49        {
50 
51               System.out.println("show run");
52 
53        }
54 
55 }
56 
57  
58 
59 class StaticCodeDemo
60 
61 {
62 
63        static
64 
65        {
66 
67  
68 
69        }
70 
71        public static void main(String[] args)
72 
73        {
74 
75               new StaticCode(4);//a c d
76 
77        }
78 
79 }
复制代码



考察代码块执行顺序,打印结果:

a

c9

d

 


http://www.niftyadmin.cn/n/3649602.html

相关文章

debian vnc 配置_如何在Debian 10上安装和配置VNC

debian vnc 配置介绍 (Introduction) Virtual Network Computing, or VNC, is a connection system that allows you to use your keyboard and mouse to interact with a graphical desktop environment on a remote server. It makes managing files, software, and settings…

SEO优化:Sitemap插件生成WordPress网站地图

▣ 前言 什么是sitemap网站地图?wordpress如何自动生成sitemap地图文件呢? 对于网站建设来说,网站地图是非常关键的,因为这对搜索引擎收录是很有利的。网上有很多方法介绍sitemap网站地图的制作。大体分为两种,一种是自…

了解编程中的操作顺序

介绍 (Introduction) As a coder, you’re probably used to telling computers what to do. Type up some code, run it, and the computer gets to work executing whatever command you gave it. 作为编码员,您可能习惯于告诉计算机该怎么做。 输入一些代码&…

[wbxml]使用Perl封装的WBXML的方法

PerlWBXML编写者日期关键词郑昀ultrapower2005-9-20WBXML XML Perl利用Perl库XML::WBXML,就可以执行XML和WBXML(Wap Binary XML)之间的自由转换了:use XML::WBXML;$wbxml XML::WBXML::xml_to_wbxml($xml);$xml XML::WBXML::wbxml_to_xml($wbxml);下面我…

深入理解java的finalize、GC、close()的优劣

目录 基本预备相关知识 对象的销毁过程 对象重生的例子 对象的finalize的执行顺序 何时及如何使用finalize 参考 基本预备相关知识 1 java的GC只负责内存相关的清理,所有其它资源的清理必须由程序员手工完成。要不然会引起资源泄露,有可能…

后端开发:SpringBoot实现注册与登录功能

这次实现的注册与登录功能需要进行数据库的基本操作,而且是前后端分离式开发。总的来说就是首先进行数据库的设计,然后根据数据库进行编写服务端API接口,接着来到客户端或移动端,进行登录与注册的界面设计,接收服务端提…

[sync4j]Nokia手机和sync4j服务器同步的第四次手机登录,手工新建了syncSource同步源

[sync4j]Nokia手机和sync4j服务器同步的第四次手机登录:在sync4j社区看到一个话题,讨论如何纠正Nokia系列手机会自动在远程数据库前面添加一个“./”符号。据Harrie说,“You can work around this by configure a similar syncsourceas the o…

debian tomcat_如何在Debian 10上安装Apache Tomcat 9

debian tomcat介绍 (Introduction) Apache Tomcat is a web server and servlet container that is used to serve Java applications. Tomcat is an open source implementation of the Java Servlet and JavaServer Pages technologies, released by the Apache Software Fou…