我们能够基于一个类创建多个该类的对象,每一个对象都拥有自己的成员,互相独立。

然而在某些时候,我们更希

望该类全部的对象共享同一个成员。

此时就是static大显身手的时候了。

Java中被static修饰符修饰的成员称为静态成员或类成员。它属于整个类全部,而不是某个对象全部,即被类的所

有对象所共享。静态成员能够使用类名直接訪问。也能够使用对象名进行訪问。

当然,鉴于他作用的特殊性更推荐用

类名訪问。

使用static修饰符能够修饰变量、方法和代码块。

一Java中的static使用方法之静态变量

我们将static修饰符修饰的变量称之为静态变量或者类变量,全部的类的对象都共享静态变量。我们能够使用类名

直接去訪问静态变量,也能够使用类的实例对象去訪问静态变量。

比如,我们在类中定义了一个 静态变量 hobby ,操作代码例如以下所看到的:

执行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

使用静态变量要注意的事项有:

A静态成员属于整个类,当系统第一次使用该类时。就会为其分配内存空间直到该类被卸载才会进行资源回收。

B静态成员变量是属于整个类的全局变量,它不单属于某一个对象;普通成员变量是属于类中的对象,它不能被

所有对象共享。

C静态成员变量必须在全局进行定义,而因为普通成员变量在创建一个对象的时候能够对它进行初始化,因此就

不需要单独对它进行定义,仅仅要声明就可以。

D静态成员变量在没有对象之前就存在。

二Java中的static使用方法之静态方法

与静态变量一样。我们也能够使用static修饰符去修饰方法,称为静态方法或类方法。事实上之前我们一直写的main

方法就是静态方法。

静态方法的使用如:

执行结果:

使用静态方法须要注意的事项有:

A静态方法中能够直接调用同类中的静态成员。但不能直接调用非静态成员。如:

B在静态方法中调用非静态变量,能够通过创建类的对象,然后通过对象来訪问非静态变量。如:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

C在普通成员方法中,则能够直接訪问同类的非静态变量和静态变量,例如以下所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

D静态方法中不能直接调用非静态方法,须要通过对象来訪问非静态方法。

如:

三Java中的static使用方法之静态初始化块

Java中能够通过初始化块进行数据赋值。

如:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

在类的声明中。能够包括多个初始化块,当创建类的实例时。就会依次运行这些代码块。假设使用static修饰符去

修饰初始化块,就称为静态初始化块。

使用静态初始化块须要注意的事项有:

静态初始化块仅仅在类载入时运行,且仅仅会运行一次,同一时候静态初始化块仅仅能给静态变量赋值,不

能初始化普通的成员变量。

我们来看一段代码:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

执行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

通过输出结果,我们能够看到,程序运行时静态初始化块最先被运行,然后运行普通初始化块,最后才运行构造

方法。

因为静态初始化块仅仅在类载入时运行一次。所以当再次创建对象 hello2 时并未运行静态初始化块。

我们再来看一个实例:

public class Test {

        String name; //声明变量name
String sex; //声明变量sex
static int age;//声明静态变量age // 构造方法
public Test() {
System.out.println("通过构造方法初始化name");
name = "tom";
} // 初始化块
{
System.out.println("通过初始化块初始化sex");
sex = "男";
} // 静态初始化块
static {
System.out.println("通过静态初始化块初始化age");
age = 20;
} public void show() {
System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);
} public static void main(String[] args) { // 创建对象
Test test = new Test();
// 调用对象的show方法
test.show(); }
}

执行结果:

JavaSE入门学习12: Java面相对象之static使用方法的更多相关文章

  1. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

  2. JavaSE入门学习24:Java面向对象补充

    一Java中的Object类 Object类是全部Java类的父类.假设一个类没有使用extendskeyword明白标识继承另外一个类,那么这个类默认 继承Object类. public class ...

  3. JavaSE入门学习7:Java基础语法之语句(下)

    继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...

  4. JavaSE入门学习6:Java基础语法之运算符和语句(上)

    继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...

  5. Java开发知识之Java面相对象

    Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...

  6. JavaSE入门学习17:Java面向对象之package(包)

           一Java包(package)        为了更好地组织类,Java提供了包机制,用于差别类名的命名空间.        包的作用:        A把功能类似或相关的类或接口组织在 ...

  7. JavaSE入门学习20:Java面向对象之接口(interface)(一)

    一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...

  8. JavaSE入门学习18:Java面向对象之多态

    一Java多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现.比方我们说"宠 物"这个对象.它就有非常多不同的表达或实现,比方有小猫.小狗.蜥 ...

  9. msp430入门学习12

    msp430的定时器--Timer_A(定时器A) msp430入门学习

随机推荐

  1. LR接口测试---webservices

    //================================================================================== /* //事务开始 lr_st ...

  2. 业余开发Android App的架构演变

    闲暇之余,开发了一款休闲类app,虽然用户量不多,但确实花了不少心血在这上面.然而,开发出来的结果,与之前想好的架构,还是有不少区别. 下面,记录下这款app架构的演变: 最初,只想写个app,能与机 ...

  3. 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析

    对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...

  4. Array与NSArray关系

    NSArray与Array之间的关系如同NSString与String之间的关系,NSArray是类类型,而Array是结构体类型,一个是引用类型,一个是值类型,它们是怎样实现无缝转换的呢?Swift ...

  5. VMware vCenter 6.5 安装及群集配置介绍

    一.介绍 VMware vCenter Server 提供了一个可伸缩.可扩展的平台,为虚拟化管理奠定了基础.可集中管理VMware vSphere环境,与其他管理平台相比,极大地提高了 IT 管理员 ...

  6. Deepin系统关于每次启动终端都要输入source /etc/profile的问题

    关于每次启动终端都要输入source /etc/profile的问题 当我在Deepin系统中下载了node以及npm之后,我为了将node导入到系统文件,使用了以下命令sudo gedit ``/e ...

  7. TWaver 3D应用于大型数据中心(续)

    在2014年11月份,我们当时发了一篇有关TWaver HTML5 3D应用于大型数据中心的文章,该blog比较详细的描述一些常用的功能的实现方法,比如:动态添加机柜,告警,温度,湿度等相关的功能的具 ...

  8. KMP瞎扯一下

    什么是KMP KMP俗称看毛片算法,是高效寻找匹配字串的一个算法 百度百科 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为 ...

  9. 用python写了一个猜年龄小游戏

    写一个猜年龄游戏: 需要实现用户登录的功能 初始用户登录信息为 {'hades': '13579','nick': '123','ruixing': 'a1','fanping': 'b2'} 登录时 ...

  10. react入门----组件的基础用法

    1.组件 <!-- React 允许将代码封装成组件(component),然后像插入普通 HTML 标签一样,在网页中插入这个组件.React.createClass 方法就用于生成一个组件类 ...