[java学习笔记]java语言核心----面向对象之static关键字
static关键字用处
用于修饰成员变量和成员函数
被修饰后的成员具有以下特点:
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
使用注意
静态方法只能访问静态成员;非静态方法也可以访问静态成员
静态方法中不可以写this,super关键字
主函数是静态的
实例变量(成员变量)和类变量(静态变量)的区别
- 生命周期不同
成员变量随着对象的创建而存在,随着对象的回收而释放;
静态变量随着类的加载而存在随着类的消失而消失
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();
}
}
内存图解为:

说明:
- 当执行StaticDemo2这个类时,就会在方法区中创建一个属于该类的区域,并且加载默认的构造函数,接着在StaticDemo2的静态区中加载main方法。
- main方法进栈,并开始执行第一句代码:Person.method(); 由于是类名的调用,虚拟机会在classpath环境变量下找Person类(没有配置classpath则在当前目录下找),找到后,就会把该类加载进方法区,同StaticDemo2也会分为静态和非静态区。
- 要执行method方法,所以method方法进栈,运行 System.out.println(Person.country);代码,输出“CN”。return掉该方法后,该方法出栈。
- 执行new Person对象的操作,该操作前上篇随笔(构造函数中)已有分析,这里不累述。
- 执行完所有代码后,main方法出栈。
- 静态代码块
static {
System.out.println("这是静态代码块");
}
1.静态代码块
随着类的加载而执行,并且执行一次。属于类。
2.作用
用于给类进行初始化。比如像javaAPI提供的Math类,全部为静态的方法,不允许创建对象,这个时候不能用构造 函数进行初始化,因为构造函数一般是给对象初始化,不能创建对象时不可使用。所以就要使用静态代码块来进行一些初始化的操作。
- 构造代码块
不同于静态代码块,是属于类的代码块,如:
class Demo{
{
System.out.println("这是构造代码块");
}
//。。。
}
和对象有关
可以给所有对象进行初始化,构造函数是给对应的对象进行针对性的初始化。
每次创建对象时都会执行。静态代码块是在类加载时执行一次。
[java学习笔记]java语言核心----面向对象之static关键字的更多相关文章
- Java学习笔记(十八):static关键字
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- 【疯狂Java学习笔记】【理解面向对象】
[学习笔记]1.Java语言是纯粹的面向对象语言,这体现在Java完全支持面向对象的三大基本特征:封装.继承.多态.抽象也是面向对象的重要组成部分,不过它不是面向对象的特征之一,因为所有的编程语言都需 ...
- 我的Java学习笔记-Java面向对象
今天来学习Java的面向对象特性,由于与C#的面向对象类似,不需详细学习 一.Java继承 继承可以使用 extends 和 implements 这两个关键字来实现继承. extends:类的继承是 ...
- java学习笔记(3)——面向对象
this关键字 this是当前对象的引用,是运行期间当前对象本身. 可以使用this明确的访问当前对象的属性或者方法,类似于“我” this()可以调用本类的其他构造器,可以使用构造器的重用简化代码的 ...
- Java学习笔记-Java概述和环境配置
基础常识 软件:一系列按照特定顺序组织的计算机数据 和指令的集合 常见的软件: 系统软件:如:DOS,windows,Linux等 应用软件:如:扫雷,迅雷,QQ等 软件的出现实现了人与计算机之间的更 ...
- java学习笔记----java入门
java基础 一.java语言跨平台原理 1.什么是跨平台? 跨平台就是一个软件可以在不同的操作系统中运行,但是不需要对其修改.换句话说,java语言编写的软件在不做修改的情况下就能在不同的系统平台上 ...
随机推荐
- Codeforces 278C Learning Languages(并查集)
题意抽象出来就是求联通块的个数吧,然后添加最少边使图联通. 注意所有人都不会任何语言的时候,答案是n而不是n-1. #include<algorithm> #include<iost ...
- android 自定义按钮实现 home键 和返回键
由于在自己做的东西中用到了就总结一下,自己做了测试 在一个程序运行中如果按 返回键 分别执行了 : onpause() onStop() onDestory()方法 如果点击 home键 ...
- iOS开发——动画篇Swift篇&炫酷弹出菜单
炫酷弹出菜单 这个是一个第三方按钮菜单组件,原版是使用Objective-C编写的名为AwesomeMenu的组件,地址是:https://github.com/levey/AwesomeMenu ...
- web开发技术点解析
一.控件篇 1.radio控件 在创建单选控件时,要做到多个radio有单选功能.必须把多个radio的name属性值设置为同样的,否则,多个radio之间是没有联系的. 二.样式篇 1.获取图片中的 ...
- [Effective C++ --031]将文件间的编译依存关系降至最低
引言:编译时间成本 在项目中我们都会碰到修改既存类的情况:某个class实现文件做了些轻微改变,修改的不是接口,而是实现,而且只改private成分. 重新build这个程序,并预计只花数秒就好,当按 ...
- UNIX标准化及实现之POSIX标准可选头文件
POSIX标准定义的可选头文件 头文件 说明 <aio.h> 异步I/O <mqueue.h> 消息队列 <pthread.h> 线程 <sched.h> ...
- Qt... configure: error: Qt (>= Qt 2.2.2) (headers…
转载:http://blog.chinaunix.net/uid-23733724-id-290980.html 昨天开始在自己的fedora12下装qt~ 但是按照教程在/opt/Embed ...
- c++之函数原型
函数原型: [作用域] [函数连接规范] 返回值类型 [函数调用规范] 函数名 (类型1[形参1]...); 函数定义: [函数连接规范] 返回值类型 [函数调用规范] 函数名 (形参列表) {... ...
- CF Watto and Mechanism (字典树+深搜)
Watto and Mechanism time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- 关于Linux的总结(二)
主要内容 Linux 安装 常用命令 VI编辑器的使用 远程登录 主机名的设置 IP的设置 防火墙的设置 用户和组账户管理 文件权限管理 RPM软件包管理 软件的安装 Jdk,tomcat, ecli ...