• static关键字用处

    1. 用于修饰成员变量和成员函数

  • 被修饰后的成员具有以下特点:

      1. 随着类的加载而加载

      2. 优先于对象存在

      3. 被所有对象所共享

      4. 可以直接被类名调用

  • 使用注意

      1. 静态方法只能访问静态成员;非静态方法也可以访问静态成员

      2. 静态方法中不可以写this,super关键字

      3. 主函数是静态的

  • 实例变量(成员变量)和类变量(静态变量)的区别

    1. 生命周期不同

成员变量随着对象的创建而存在,随着对象的回收而释放;

静态变量随着类的加载而存在随着类的消失而消失

2.   调用方式不同

成员变量只能被对象调用
                           静态变量能被对象调用也能被类名调用(一般建议使用类名调用)

3.   别名不同

成员变量也叫实例变量
                          静态变量也叫类变量

4.   数据的存储位置不同

成员变量数据存储在堆内存中的对象中,所以是对象的特有数据 
                          静态变量数据存储在方法区(数据区或共享数据区)的静态区中,所以也叫对象的共享数据

  • 内存图解

以下代码在内存中的执行:

class Person{

    private String name;
private int age;
static String country = "CN";
public Person(String name, int age){
this.name = name;
this.age = age;
}
public void show(){
System.out.println(Person.country+":"+this.name+":"+this.age);
}
public static void method(){
System.out.println(Person.country);
}
}
class StaticDemo2{
public static void main(String[] args){
Person.method(); Person p = new Person("java",20);
p.show();
}
}

内存图解为:

说明:

  1. 当执行StaticDemo2这个类时,就会在方法区中创建一个属于该类的区域,并且加载默认的构造函数,接着在StaticDemo2的静态区中加载main方法。
  2. main方法进栈,并开始执行第一句代码:Person.method(); 由于是类名的调用,虚拟机会在classpath环境变量下找Person类(没有配置classpath则在当前目录下找),找到后,就会把该类加载进方法区,同StaticDemo2也会分为静态和非静态区。
  3. 要执行method方法,所以method方法进栈,运行 System.out.println(Person.country);代码,输出“CN”。return掉该方法后,该方法出栈。
  4. 执行new Person对象的操作,该操作前上篇随笔(构造函数中)已有分析,这里不累述。
  5. 执行完所有代码后,main方法出栈。
  • 静态代码块
static {
System.out.println("这是静态代码块");
}

1.静态代码块

随着类的加载而执行,并且执行一次。属于类。

2.作用

用于给类进行初始化。比如像javaAPI提供的Math类,全部为静态的方法,不允许创建对象,这个时候不能用构造 函数进行初始化,因为构造函数一般是给对象初始化,不能创建对象时不可使用。所以就要使用静态代码块来进行一些初始化的操作。

  • 构造代码块

不同于静态代码块,是属于类的代码块,如:

class Demo{
{
System.out.println("这是构造代码块");
}
    //。。。
}

和对象有关

可以给所有对象进行初始化,构造函数是给对应的对象进行针对性的初始化。

每次创建对象时都会执行。静态代码块是在类加载时执行一次。

 

[java学习笔记]java语言核心----面向对象之static关键字的更多相关文章

  1. Java学习笔记(十八):static关键字

  2. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  3. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  4. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  5. 【疯狂Java学习笔记】【理解面向对象】

    [学习笔记]1.Java语言是纯粹的面向对象语言,这体现在Java完全支持面向对象的三大基本特征:封装.继承.多态.抽象也是面向对象的重要组成部分,不过它不是面向对象的特征之一,因为所有的编程语言都需 ...

  6. 我的Java学习笔记-Java面向对象

    今天来学习Java的面向对象特性,由于与C#的面向对象类似,不需详细学习 一.Java继承 继承可以使用 extends 和 implements 这两个关键字来实现继承. extends:类的继承是 ...

  7. java学习笔记(3)——面向对象

    this关键字 this是当前对象的引用,是运行期间当前对象本身. 可以使用this明确的访问当前对象的属性或者方法,类似于“我” this()可以调用本类的其他构造器,可以使用构造器的重用简化代码的 ...

  8. Java学习笔记-Java概述和环境配置

    基础常识 软件:一系列按照特定顺序组织的计算机数据 和指令的集合 常见的软件: 系统软件:如:DOS,windows,Linux等 应用软件:如:扫雷,迅雷,QQ等 软件的出现实现了人与计算机之间的更 ...

  9. java学习笔记----java入门

    java基础 一.java语言跨平台原理 1.什么是跨平台? 跨平台就是一个软件可以在不同的操作系统中运行,但是不需要对其修改.换句话说,java语言编写的软件在不做修改的情况下就能在不同的系统平台上 ...

随机推荐

  1. Codeforces 278C Learning Languages(并查集)

    题意抽象出来就是求联通块的个数吧,然后添加最少边使图联通. 注意所有人都不会任何语言的时候,答案是n而不是n-1. #include<algorithm> #include<iost ...

  2. android 自定义按钮实现 home键 和返回键

    由于在自己做的东西中用到了就总结一下,自己做了测试 在一个程序运行中如果按 返回键  分别执行了 : onpause()     onStop()   onDestory()方法 如果点击 home键 ...

  3. iOS开发——动画篇Swift篇&炫酷弹出菜单

    炫酷弹出菜单   这个是一个第三方按钮菜单组件,原版是使用Objective-C编写的名为AwesomeMenu的组件,地址是:https://github.com/levey/AwesomeMenu ...

  4. web开发技术点解析

    一.控件篇 1.radio控件 在创建单选控件时,要做到多个radio有单选功能.必须把多个radio的name属性值设置为同样的,否则,多个radio之间是没有联系的. 二.样式篇 1.获取图片中的 ...

  5. [Effective C++ --031]将文件间的编译依存关系降至最低

    引言:编译时间成本 在项目中我们都会碰到修改既存类的情况:某个class实现文件做了些轻微改变,修改的不是接口,而是实现,而且只改private成分. 重新build这个程序,并预计只花数秒就好,当按 ...

  6. UNIX标准化及实现之POSIX标准可选头文件

    POSIX标准定义的可选头文件 头文件 说明 <aio.h> 异步I/O <mqueue.h> 消息队列 <pthread.h> 线程 <sched.h> ...

  7. Qt... configure: error: Qt (>= Qt 2.2.2) (headers…

    转载:http://blog.chinaunix.net/uid-23733724-id-290980.html     昨天开始在自己的fedora12下装qt~ 但是按照教程在/opt/Embed ...

  8. c++之函数原型

    函数原型: [作用域] [函数连接规范] 返回值类型 [函数调用规范] 函数名 (类型1[形参1]...); 函数定义: [函数连接规范] 返回值类型 [函数调用规范] 函数名 (形参列表) {... ...

  9. CF Watto and Mechanism (字典树+深搜)

    Watto and Mechanism time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  10. 关于Linux的总结(二)

    主要内容 Linux 安装 常用命令 VI编辑器的使用 远程登录 主机名的设置 IP的设置 防火墙的设置 用户和组账户管理 文件权限管理 RPM软件包管理 软件的安装 Jdk,tomcat, ecli ...