这一节我们来学习java语言中一个新的keyword就是statickeyword。

当然对于每个keyword,我们都要明白的是它有什么作用,怎么用。我们先来看一个样例:

class Person
{
String name;//姓名
String country = "中国";//国籍 public void printInfo()
{
System.out.println(name+":"+country);
}
} class StaticTest
{
public static void main(String[] args)
{
Person p = new Person();
p.name = "小强";
p.printInfo();
Person p1 = new Person();
p1.name = "小明";
p1.printInfo();
Person p2 = new Person();
p2.name = "小红";
p2.printInfo();
}
}

我们看看这个样例的执行结果:

我们会发现创建的三个对象中,姓名不同。可是国籍是同样的,那么对于非常多个对象呢,国籍是同样的。那么我们就会想能不能把国籍独立起来放到一个空间中供全部对象直接引用就能够了。而在对象中仅仅须要有姓名这个属性就可以。

java语言给我了我们解决问题的途径,那就是我们如今要说的statickeyword。

非常明显。我们也就明白了statickeyword的作用:就是把特有数据谜面全部对象都能共享的数据,也称为对象的共享数据。

那么上面的代码用statickeyword进行优化:

class Person
{
String name;//姓名
static String country = "中国";//国籍 public void printInfo()
{
System.out.println(name+":"+country);
}
}

当然结果还是我们上面看到的结果。可是实际上,内存中会把country专门存放在一个独立的空间中,而每一个对象中都仅仅有name属性,这样就节省了非常多不必须的空间。

我们刚才看了statickeyword的作用,那么以下我们再来看statickeyword有哪些特点呢?

我们通过上面的样例。引申总结出下面四条特点:

1.static既是keyword。也是修饰符。用于修饰成员。这里的成员就是成员变量和成员函数。

2.statickeyword修饰的数据是共享数据。我们前面看到了static的作用就是修饰共享数据,而对象中存储的数据就是每一个对象的特有数据。

3.statickeyword修饰的成员随着类的载入而载入。这是因为static修饰的数据要被全部对象共享,所以要在对象共享之前就存在。因此java语言就赋予了static这种功能。

4.statickeyword修饰的成员优先于对象存在,由于static成员是随着类的载入面存在的。

5.statickeyword修饰的成员多了一种调用方法。能够直接被类名调用,即:类名.静态成员 的调用方式。

比方上面的样例中,我们能够这样调用:

class StaticTest
{
public static void main(String[] args)
{
Person p = new Person();
//p.name = "小强";
//p.printInfo();
System.out.println(Person.country);
}
}

结果:

我们看到staitc修饰的成员我们能够直接用类名去调用,也就是说我们不须要创建对象就能够直接调用。由于static成员随着类的载入而存在,实现了同样数据被不多个对象的共享。

当然。既然我们的java是面向对象语言,假设我们把全部的成员都用static修饰。也就是说没有对象了,那是一件多么可怕的事情呢。可是,无论怎么说,共享数据个人觉得确实还是比較爽的。


[javase学习笔记]-8.1 statickeyword之特点的更多相关文章

  1. [javase学习笔记]-8.3 statickeyword使用的注意细节

    这一节我们看静态在使用过程中应注意的几个细节. 上一节我们在学习成员变量与静态变量的差别时,对于两种变量的调用方式不同一时候出现了"无法从静态上下文中訪问非静态变量"的错误.这个问 ...

  2. [javase学习笔记]-8.5 statickeyword的使用场景

    这一节我们来看一下在我们开发的过程中,在什么时候我们要用到statickeyword进行静态修饰. 我们这里所说的静态.无非就是两种.一种是静态变量,一种是静态函数,我们分这两种情况进行说明stati ...

  3. javaSE学习笔记(17)---锁

    javaSE学习笔记(17)---锁 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读 ...

  4. javaSE学习笔记(16)---网络编程

    javaSE学习笔记(16)---网络编程 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机 ...

  5. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

  6. JavaSE学习笔记(14)---File类和IO流(字节流和字符流)

    JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...

  7. JavaSE学习笔记(13)---线程池、Lambda表达式

    JavaSE学习笔记(13)---线程池.Lambda表达式 1.等待唤醒机制 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用 ...

  8. JavaSE学习笔记(12)---线程

    JavaSE学习笔记(12)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...

  9. javaSE学习笔记(11)--- Map

    javaSE学习笔记(11)--- Map 1.Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Jav ...

随机推荐

  1. 外行人都能看懂的SpringCloud

    一.前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)... 所以,这篇主要来讲讲SpringCloud的一些基础的 ...

  2. iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置

    iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置 ios9音频应用播放控制 在“iOS 9音频应用播放音频之ios9音频基本功能”一文可以看到AVAudioPlayer类有很多的属性以及方法 ...

  3. FastReport.Net使用:[19]复选框的使用

    FastReport中,用好复选框会使报表更美观. 复选框的用法举例: 1.点菜系统中,打印用户点菜时,将已点的菜进行打“√”标记等. 2.选课系统中,将已选科目进行打“√”等. 认识复选框 复选框只 ...

  4. zoj 3329 概率dp

    题意:有三个骰子,分别有k1,k2,k3个面.每个面值为1--kn每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和.当分数大于n时结束.求游戏的期望步数.初始分数为0 链接 ...

  5. 读书笔记_Effective_C++_条款二十七:尽量少做转型动作

    有关转型的几种做法,已经在早些的博客中写过了.这里先简单回顾一下,再讲一讲effective中对之更深入的阐述. 转型可以按风格可以分成C风格转型和C++风格转型两大类,C风格转型很容易看到,因为我们 ...

  6. Java集合--HashMap分析

    HashMap在Java开发中有着非常重要的角色地位,每一个Java程序员都应该了解HashMap. 本文主要从源码角度来解析HashMap的设计思路,并且详细地阐述HashMap中的几个概念,并深入 ...

  7. 思科DCHP解决方案

    DHCP功能平时用的不算少,而且本人的几乎所有的DHCP功能都是在交换机上实现的,虽然也可以通过PC实现,而且PC的DHCP Server功能还更完善,比如可以不受DHCP作用域的限制.IP分配情况直 ...

  8. .NET 中字符文本中的字符太多 错误处理

    错误截图   问题描述    在ASP.NET中使用多层引号,要引起注意,引号使用不当会引起“字符文本中字段太多”编译错误!今天我就遇到了这个错误,整理于此!     “字符文本中字段太多”错误提示过 ...

  9. Microsoft Visual Studio 2010导致系统C盘不断增大问题处理。

    一直用Microsoft Visual Studio 2010做开发,发现最近C盘空间是越来越小,一开始以为是IE或者一些系统补丁造成的临时文件,但是使用360,windows优化大师之类的软件都清过 ...

  10. React Native中树 TreeView 实现(1)

    背景: 基于项目需要,在搜索第三方类库后没有很好的效果后决定动手实现. 开发环境: React Native 0.44 模型: 由于数据已经全部取出,不需要分级异步加载,故而只需要实现层级展示即可. ...