1. 静态变量和静态代码块是在JVM加载类的时候执行的(静态变量被赋值,以后再new时不会重新赋值),执行且只执行一次
2. 独立于该类的任何对象,不依赖于特定的实例,被类的所有实例(对象)所共享
3. 可以通过类名调用 比如:Student.age;
4. 静态是随类的加载而加载,this是随对象的创建而存在(静态比对象优先)
因此,静态方法中没有this关键字,即静态方法中不能使用非静态变量
举例:class Student{
public int num = 0;
public static void method(){System.out.println(num)} //NG无法从静态上下文中引用非静态变量num
}
5. 静态方法只能访问静态的成员变量和静态的成员方法
6. 静态发法和普通方法一样,当使用时被调用,不同的是一开始系统为其分配内存空间。
举例1:
public class Student{
public static void main(String[] args) {
method2(); //调用静态方法
new Student().method1(); //调用非静态方法
}
public void method1{System.out.println("XXX")}
public static void method2{System.out.println("XXX")}
} 举例2:
class Student{
private Student(){} //把构造方法私有化,外界就不能创建对象了
public static void method1{System.out.println("XXX")}
public static void method2{System.out.println("XXX")}
}
使用:Student.method1();
Student st = new Student();ss.method1(); //NG
用途:工具类,都是静态方法,直接通过类名调用方法
7. 父类静态代码块 >> 子类静态代码块 >> 父类构造方法 >> 子类构造方法 class Code{

// 静态代码块 >> 构造代码块 >> 构造方法
// 静态代码块随着类的加载而加载因此优先执行
// 静态代码块,最优先执行,一般对类进行初始化,只执行一次(第一次)
① static {
System.out.println("XXX")

}
// 构造代码块,每次构造函数执行之前执行
// 可以把多个构造方法中共同代码放在一起,对对象初始化
{
System.out.println("XXX");
}
public Code(){}
{
System.out.println("xxx");
}

// ①比main方法先执行
public static void main(String[]){
{
int XXX= 1;
// 局部代码块,限定变量生命周期,及早释放,提高内存利用率
System.out.println("XXX");
}
}
}

8. 举例数据库缓存

public class CacheDemo {

即使new了一个新对象,map里数据还是保存的。
栈是用完就没了,堆是赋值为null/结束是才会被jvm回收。

static  Map<String, User> cacheMap = new HashMap<String, User>();
public User getUser(String id){
    String key = User.class.getName() + id;

User user = cacheMap.get(key));

    if(user != null){
        return user;
    }

user = QueryDB();

cacheMap.put(key, user);

return user;

}

public User updateUser(User user){

updateDB(user);

String key = User.class.getName() + user.id;

cacheMap.remove(key);

}

}

9.静态代码块static{},静态方法static void method{}

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;
需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的.
静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口。
两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的.

java 基础 --静态的更多相关文章

  1. Java基础-静态代理与动态代理比较

    JAVA的静态代理与动态代理比较 静态代理类: 由程序员创建或由特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了.动态代理类: 在程序运行时,运用反射机制动态创建 ...

  2. java基础-静态,非静态(构造)代码块,类加载

    static block and non-static block(constructor block) [toc] 想来想去,先来一题比较好 public class Foo { public st ...

  3. java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?

    多态 package com.swift.jiekou; public class Jicheng_Tuotai_jingtai_diaoyong { public static void main( ...

  4. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  5. 黑马程序员:Java基础总结----静态代理模式&动态代理

    黑马程序员:Java基础总结 静态代理模式&动态代理   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public  class  Ts {   ...

  6. 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点

    前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...

  7. JAVA基础知识(六)Java 静态多分派&动态单分派

    1.分派发生在编译期和运行期,编译期的分派为静态分派,运行期的为动态分派. 2.编译期是根据对象声明的类型来选择方法,运行期是根据对象实际类型来选择方法. 3.单分派和多分派取决于宗量, 方法调用者和 ...

  8. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  9. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

随机推荐

  1. 利用BlockingCollection实现生产者和消费者队列,实现写文本

    最近开发几个小项目,需要把结果写到txt文件里面,并且按照时间进行分文件,由于对于效率要求较高,所以采用 生产者和消费者 模型来进行写出文本,线程中只需要添加队列就立即返回,而不需要等待写文件的时间 ...

  2. 菜鸟vimer成长记——第2.3章、insert模式

    大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些. 如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成. 目的 掌握inser模式下常用操作的语法和概 ...

  3. .net 分布式学习计划

    一: 1:.net分布式系统架构的思路     https://blog.csdn.net/slowlifes/article/details/53162014 2: nginx+iis实现负载均衡 ...

  4. SpringBoot日记——登录与拦截器篇

    之前的文章我们把登录页写了出来,但是想要让登录现实他的基本功能,要如何做呢?本篇文章就来帮你实现第一步,让登录页对账号密码做校验,并且完成登录跳转. LoginController 1. 要实现登录, ...

  5. jmeter控制器(二)

    循环控制器: 顾名思义就是做循环控制的,与线程组的循环一样的,不过这里的循环控制器是用在一个单独的模块的,而在线程组里面的循环是作用于全局的.循环控制器里面设置的循环次数是局部有效,只控制自己范围内的 ...

  6. 小冷-wireshark的标志位的值是啥

    小冷系列之 wireshark的标志位的值是啥,在用wireshark抓包时,发现Flags = 0x002(SYN),很好奇0x002是什么意思. 好不好先上图: 上图是一个三次握手第一次的标志位, ...

  7. 廖雪峰git教程学习笔记3

    commit是一串不便记忆的数字,为了方便记忆,引入tag,tag就跟HEAD一样,就像一个指针,指向commit,且指向是不能变得,一个commit就有一个tag 给当前分支下的当前commit打上 ...

  8. python-gevent模块实现socket大并发

    服务器端:gevent_server.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

  9. docker usage

    docker ps -a 查看物理机上面所有容器信息列表 docker exec -it $docker_id /bin/bash 进入容器以默认帐号 docker exec -it -u root ...

  10. 基于tensorflow实现mnist手写识别 (多层神经网络)

    标题党其实也不多,一个输入层,三个隐藏层,一个输出层 老样子先上代码 导入mnist的路径很长,现在还记不住 import tensorflow as tf import tensorflow.exa ...