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. 3495: PA2010 Riddle

    3495: PA2010 Riddle 链接 分析: 每个点要么建首都,要么不建,并且一个点建了,会导致一些点不能建.所以可以考虑2-sat. 但是如果在每个郡里两两连边,边数是n^2的. 考虑用前缀 ...

  2. 洛咕 P3645 [APIO2015]雅加达的摩天楼

    暴力连边可以每个bi向i+kdi连边权是k的边. 考虑这样的优化: 然后发现显然是不行的,因为可能还没有走到一个dog的建筑物就走了这个dog的边. 然后就有一个很妙的方法--建一个新的图,和原图分开 ...

  3. [BZOJ3167][HEOI2013]SAO[树dp+组合数学]

    题意 给定 \(n\) 个节点和 \(n-1\) 个限制,每个节点有一个权值,每个限制形如:\(a_i< a_j\) ,问有多少个 \(1\) 到 \(n\) 排列满足要求. \(n\leq 1 ...

  4. redis基本使用

    一 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted ...

  5. Windows:打开MSDTC,恢复Windows任务栏,查看windows日志,打开远程桌面,打开Services,资源监控

    Windows 服务器系列: Windows:查看IP地址,IP地址对应的机器名,占用的端口,以及占用该端口的应用程 Windows:使用Dos命令管理服务(Services) Windows:任务调 ...

  6. 16节实用性爆棚的Ps课:零基础秒上手,让你省钱也赚钱

    ps视频教程,ps自学视频教程.ps免费视频教程下载,16节实用性爆棚的Ps课教程视频内容较大,分为俩部分: 16节实用性爆棚的Ps课第一部分:百度网盘,https://pan.baidu.com/s ...

  7. React——JSX

    一.将表达式嵌套在JSX中 要在JSX中内嵌js表达式只需要将js表达式放在{}中,例如: const element = <h1>this is a JSX {sayName()}< ...

  8. Jenkins管理插件(备份插件)

    Jenkins管理插件 为了让所有的插件在 Jenkins 内可用,所有插件的列表可以访问链接 − https://wiki.jenkins-ci.org/display/JENKINS/Plugin ...

  9. C#_Switch语句的内部实现

    Switch的C#内部实现 https://www.cnblogs.com/Interkey/p/3730432.html 在IL汇编语言中的Switch指令 -- 按照标号来进行跳转(和goto语句 ...

  10. MD5加密--项目案例

    在项目中最尝使用MD5这种非对称加密的就是用户信息登录了.下面我就以一个简单的登录案例来说明MD5的用法 首先来看几张图: 用户登录页:需要选择要登录的系统,同时输入用户的用户名和密码,验证码才能进入 ...