java 基础 --静态
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 基础 --静态的更多相关文章
- Java基础-静态代理与动态代理比较
JAVA的静态代理与动态代理比较 静态代理类: 由程序员创建或由特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了.动态代理类: 在程序运行时,运用反射机制动态创建 ...
- java基础-静态,非静态(构造)代码块,类加载
static block and non-static block(constructor block) [toc] 想来想去,先来一题比较好 public class Foo { public st ...
- java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?
多态 package com.swift.jiekou; public class Jicheng_Tuotai_jingtai_diaoyong { public static void main( ...
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...
- 黑马程序员:Java基础总结----静态代理模式&动态代理
黑马程序员:Java基础总结 静态代理模式&动态代理 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public class Ts { ...
- 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...
- JAVA基础知识(六)Java 静态多分派&动态单分派
1.分派发生在编译期和运行期,编译期的分派为静态分派,运行期的为动态分派. 2.编译期是根据对象声明的类型来选择方法,运行期是根据对象实际类型来选择方法. 3.单分派和多分派取决于宗量, 方法调用者和 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 【JAVA面试题系列一】面试题总汇--JAVA基础部分
JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...
随机推荐
- 3495: PA2010 Riddle
3495: PA2010 Riddle 链接 分析: 每个点要么建首都,要么不建,并且一个点建了,会导致一些点不能建.所以可以考虑2-sat. 但是如果在每个郡里两两连边,边数是n^2的. 考虑用前缀 ...
- 洛咕 P3645 [APIO2015]雅加达的摩天楼
暴力连边可以每个bi向i+kdi连边权是k的边. 考虑这样的优化: 然后发现显然是不行的,因为可能还没有走到一个dog的建筑物就走了这个dog的边. 然后就有一个很妙的方法--建一个新的图,和原图分开 ...
- [BZOJ3167][HEOI2013]SAO[树dp+组合数学]
题意 给定 \(n\) 个节点和 \(n-1\) 个限制,每个节点有一个权值,每个限制形如:\(a_i< a_j\) ,问有多少个 \(1\) 到 \(n\) 排列满足要求. \(n\leq 1 ...
- redis基本使用
一 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted ...
- Windows:打开MSDTC,恢复Windows任务栏,查看windows日志,打开远程桌面,打开Services,资源监控
Windows 服务器系列: Windows:查看IP地址,IP地址对应的机器名,占用的端口,以及占用该端口的应用程 Windows:使用Dos命令管理服务(Services) Windows:任务调 ...
- 16节实用性爆棚的Ps课:零基础秒上手,让你省钱也赚钱
ps视频教程,ps自学视频教程.ps免费视频教程下载,16节实用性爆棚的Ps课教程视频内容较大,分为俩部分: 16节实用性爆棚的Ps课第一部分:百度网盘,https://pan.baidu.com/s ...
- React——JSX
一.将表达式嵌套在JSX中 要在JSX中内嵌js表达式只需要将js表达式放在{}中,例如: const element = <h1>this is a JSX {sayName()}< ...
- Jenkins管理插件(备份插件)
Jenkins管理插件 为了让所有的插件在 Jenkins 内可用,所有插件的列表可以访问链接 − https://wiki.jenkins-ci.org/display/JENKINS/Plugin ...
- C#_Switch语句的内部实现
Switch的C#内部实现 https://www.cnblogs.com/Interkey/p/3730432.html 在IL汇编语言中的Switch指令 -- 按照标号来进行跳转(和goto语句 ...
- MD5加密--项目案例
在项目中最尝使用MD5这种非对称加密的就是用户信息登录了.下面我就以一个简单的登录案例来说明MD5的用法 首先来看几张图: 用户登录页:需要选择要登录的系统,同时输入用户的用户名和密码,验证码才能进入 ...