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

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

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

此时就是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. python网络爬虫。第一次测试-有道翻译

    2018-03-0720:53:56 成功的效果如下 代码备份 # -*- coding: UTF-8 -*- from urllib import request from urllib impor ...

  2. 更新html技术比较

    document.write() document对象的write方法可以很简单的向页面的源代码中添加内容,不过不推荐使用. 优点:可以快速简单的让初学者理解如何向页面添加内容: 缺点: 只有页面初始 ...

  3. JMeter在linux上分布式压测遇到的坑(三)

    master和slave机要在同一网段内,才能做分布式(Jmeter要配环境变量,这样不用手动起server) 分布式不成功,解决方案: 1.master端和slave端要ping通 2.ping通后 ...

  4. day18-常用模块III (numpy、pandas、matplotlib)

    目录 numpy模块 创建矩阵 获取矩阵的行列数 切割矩阵 矩阵元素替换 矩阵的合并 通过函数创建矩阵 矩阵的运算 矩阵的点乘与转置 矩阵的逆 矩阵的其他操作 numpy.random生成随机数 pa ...

  5. TP中U方法详解

    U方法常用于ThinkPHP里的页面跳转 官方称为url组装, 就是根据某种规则组成一个url地址,这个功能就叫组装. 在ThinkPHP里,系统提供了一个封装的函数来处理url的组装,俗称U方法. ...

  6. mybatis 使用参数

    Parameter  1.   传入简单类型 JAVA代码: public User get(Long id) { return (User) getSqlSession().selectOne(&q ...

  7. 【原】thinkphp实现存储session至redis

    Thinkphp\Library\Think\Session\Driver中新建redis缓存文件:Redis.class.php Thinkphp\Common\function.php 中 fun ...

  8. NOIp2017——追求那些我一直追求的

    谨以此祭奠我即将爆炸的NOIP2017. $Mingqi\_H\ \ 2017.09.24$ Day -47 突然发现半年来自己从来没有写对过SPFA,最近几天才发现自己的板子一直是错的...赶紧找个 ...

  9. MFC 程序 手写创建顺序

    MFC 程序 手写创建顺序 1.继承CWinApp类 覆盖 class CMyApp : public CWinApp { virtual BOOL InitInstance(); } BOOL CM ...

  10. [Luogu] P1407 [国家集训队]稳定婚姻

    题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的姗姗和男友谈恋爱半年就结婚,结婚不到 ...