[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语言编写的软件在不做修改的情况下就能在不同的系统平台上 ...
随机推荐
- [Javascript] Maybe Functor
In normal Javascript, we do undefine check or null check: , name: "Suvi"}; var name = pers ...
- [Ramda] Simple log function for debugging Compose function
const log = function(x){ console.log(x); return x; } const get = R.curry(function(prop, obj){ return ...
- 压力单位MPa、Psi和bar之间换算公式
压力单位MPa.Psi和bar之间换算公式 1bar=10^5PaPsi为英制压力单位.“磅力每平方英寸(1bf/in2)为1psi=6894.76 pa: 1bar等于10的5次方=10^5 pa ...
- qsort函数、sort函数 (精心整理篇)
先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有 ...
- windows下的python扩展包下载地址
比如lxml什么的 Unofficial Windows Binaries for Python Extension Packages pip install xxx.whl
- 解决Download interrupted: Connection to https://dl-ssl.google.com refused的问题
运行->drivers->etc->hosts 加入一行 74.125.237.1 dl-ssl.google.com ok! =================上述方法已经失效, ...
- spring源码分析之spring-web web模块分析
0 概述 spring-web的web模块是更高一层的抽象,它封装了快速开发spring-web需要的基础组件.其结构如下: 1. 初始化Initializer部分 1.1 Servlet3.0 的 ...
- mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- Umbraco入门(一)--在VS中安装Umbraco
在VS中安装Umbraco 由于Vs中自己集成的IIS,所以在安装Umbraco是不用再想以前那么麻烦,需要设置IIS等等…… 使用VS的NuGet程序包管理器 创建一个用空的ASP Web应用程 ...
- javaweb学习总结十九(http协议概述以及http请求信息分析)
一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http ...