一:static特殊关键字用处

–变量
–方法
–类
–匿名方法

二:静态变量:类共有成员

–static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在。
–所有的对象实例,对于静态变量都共享存储在一个共同的空间(栈)
class Potato{
static int number=; public void setnumber(int n) {
this.number=n;
}
} public class StaticTest {
public static void main(String[] args) {
System.out.println(Potato.number);  //一:直接类名.静态变量名 Potato p=new Potato();
p.setnumber(); System.out.println(Potato.number);
System.out.println(p.number);  //二:对象调用静态变量 Potato p2=new Potato();
p2.setnumber(); System.out.println(Potato.number);
System.out.println(p.number);
System.out.println(p2.number);  //三:不同对象调用的是同一块内存区域,操作一块区域
}
}

不同于C++,在C++中静态变量要么只能通过类名.静态变量或者静态方法访问。

但是在java中静态变量可以通过对象实例来修改和获取,共享的是同共有内存块,不过生命周期要长于对象实例

其生命周期从类声明开始到程序结束,对象则是从实例化开始,对象消失结束

三:static静态方法

–静态方法也无需通过对象来引用,而通过类名可以直接引用。
–在静态方法中,只能使用静态变量,不能使用非静态变量。

–静态方法禁止引用非静态方法。
class Potato{
static int number=; public void setnumber(int n) {
this.number=n;
} public static int getnumber() {
//return this.number; this代表当前对象,static方法只允许访问静态成员,不可以访问对象数据
return number;
}
} public class StaticTest {
public static void main(String[] args) {
int val;
System.out.println(Potato.number); Potato p=new Potato();
p.setnumber(); val=p.getnumber(); //可以通过对象访问静态方法
System.out.println(val); val=Potato.getnumber(); //可以通过类直接访问静态方法
System.out.println(val);
}
}

四:static代码块

–只在类第一次被加载时调用。
–换句话说,在程序运行期间,这段代码只运行一次。
–执行顺序:static块 > 匿名块 > 构造
public class Employee {
//实例域初始化块
private int age;
private float salay;
private boolean sex;
private String name; //char name[]可以 static
{
//.... 静态初始化块,会在对象构造前执行
System.out.println("static block");
} { //对象初始化块
System.out.println("object block");
} public Employee() {
System.out.println("construct block");
}
}
static block  //先执行类静态块,执行一次
object block  //每一次对象构造前都会先执行对象初始化块,放在构造方法后面也是先执行与构造方法
construct block  //之后执行构造方法
object block
construct block

JAVA核心技术I---JAVA基础知识(对象与类)

五:static代码块执行时机

在类加载时刻被执行:(什么是类加载时刻)

类加载时刻:不是指类的声明,而是指第一次使用类来实例化对象的时刻

(一)类声明时候查看静态变量是否执行初始化---(没有初始化)

class A{
public A(String n) {
System.out.println("A construct "+n);
}
} class B{
private A a2=new A("a2"); public static A a=new A("a static"); public B() {
System.out.println("B Construct");
} public void Say() {
System.out.println("B say()");
}
} public class Test{ public static void main(String[] args) {
System.out.println("main");
B b; //声明的时候类B中的静态变量并没有被初始化
//b=new B(); //在实例化对象之前先执行静态代码块的执行,之后是普通成员变量的初始化,最后执行构造函数
}
}

(二)类第一次实例化对象时候,静态成员变量被初始化(类被加载)

class A{
public A(String n) {
System.out.println("A construct "+n);
}
} class B{
private A a2=new A("a2"); public static A a=new A("a static"); public B() {
System.out.println("B Construct");
} public void Say() {
System.out.println("B say()");
}
} public class Test{ public static void main(String[] args) {
System.out.println("main");
B b; //声明的时候类B中的静态变量并没有被初始化
b=new B(); //在实例化对象之前先执行静态代码块的执行,之后是普通成员变量的初始化,最后执行构造函数
}
}

六:总结

–static变量:不管有多少个对象,内存中只有一份

–static方法:可以用类名直接引用,无需new对象来引用

–static块:static块只执行一次,并且static块 >匿名块>构造

JAVA核心技术I---JAVA基础知识(static关键字)的更多相关文章

  1. 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承

    <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...

  2. Java核心技术 卷1 基础知识-第一天

    基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...

  3. Java学习笔记之面向对象、static关键字

    一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...

  4. Java基础系列--static关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...

  5. 【Java基础】static关键字相关

    static关键字特点: 随着类的加载而加载. 优先于对象存在. 被所有对象共享 可以直接被类名调用. 使用注意: 静态方法只能访问静态成员. 但非静态成员可以访问静态成员. 静态方法中不能使用thi ...

  6. Java基础之static关键字的用法

    Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.        静态(static)可以是: 变量 ...

  7. Java基础(十)--static关键字

    static关键字通常应用在字段.方法.静态块,还有冷门一点的内容:静态内部类.静态导入 static字段: static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存 ...

  8. Java基础(二)-static关键字分析

    static关键字是我们在编程中经常会使用到的,但有些可能只知其然而不知其所以然.下面介绍static关键字的作用再通过例子结合说明. static关键字共有五种作用(先说明static所修饰的不会改 ...

  9. java基础 2 static关键字

    2. static关键字 变量:静态变量在内存中只存在一份,只在类第一次实例化时初始化一次,同时类所有的实例都共享静态变量,可以直接同过类名                    来访问他. 方法:静 ...

  10. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...

随机推荐

  1. Git Bash的妙用 - 使用Linux命令

    如何在Windows中使用Linux命令? 网上有很多说是安装CygwinPortable 在cmd 窗口下是用linux 命令,但是还有一些缺陷. 其实对于程序员来说有一个非常简单有效的方法,那就是 ...

  2. Mysql 函数大全- 5.6 中文解释函数参考

    mysql 函数大全 5.6 函数参考 5.6函数参考    (只翻译部分,细节查看相关英文版) 12.1功能和操作员参考 12.2表达式评估中的类型转换 12.3运营商 12.4控制流功能 12.5 ...

  3. [APIO2012]守卫

    近日状态并不是很好, 很不稳, 思路也不是很清晰 希望自己能走出来 题意:有序列1~n 现给出两种区间 区间0:序号在[x, y]的节点不能有忍者 区间1:序号在[x, y]的节点区间里至少有一个忍者 ...

  4. docker 创建私有仓库

    由于国内访问国际网络缓慢,从DockerHub下载镜像的速度感人,所以我们有必要在本地或者自己的云服务器上搭建一套镜像仓库,提高容器下载速度使用私有仓库需修改地址:Centos 7 Docker配置: ...

  5. 设置Linux防火墙

    设置 Linux 服务器防火墙脚本,Web_iptables.sh 通过内网可访问服务器所有开放端口 给跳板机开放sshd端口连接服务器 信任ip 所有端口均开放 开放部分端口供外部访问 #!/bin ...

  6. Hdoj 1905.Pseudoprime numbers 题解

    Problem Description Fermat's theorem states that for any prime number p and for any integer a > 1 ...

  7. android设置透明度代码片段

    我们可以在代码中完成对窗体透明度(这是窗体本身的透明度,非背景)的设置,方法如下: WindowManager.LayoutParams windowLP = getWindow().getAttr ...

  8. 蓝桥杯试题 k倍区间(dp)

    问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. ...

  9. ACM-ICPC 2018 南京赛区网络预赛 G Lpl and Energy-saving Lamps(线段树)

    题目链接:https://nanti.jisuanke.com/t/30996 中文题目: 在喝茶的过程中,公主,除其他外,问为什么这样一个善良可爱的龙在城堡里被监禁Lpl?龙神秘地笑了笑,回答说这是 ...

  10. MacBook上使用ssh localhost被拒绝

    最开始以为没有装sshd呢,实际上不是.又查了些方法,有些人居然把Linux上访问失败的方法直接照搬,让我建立公私钥.都没有成功.最后找到了解决方法,原来是由于苹果的安全限制,限制了这个功能. sud ...