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.一个". ...
随机推荐
- AServer - 基于Asp.net core Kestrel的超迷你http服务器
AServer是基于ASP.NET Core Kestrel封装的一个超迷你http服务器.它可以集成进你的Core程序里,用来快速的响应Http请求,而不需要集成整个ASP.NET Core MVC ...
- 动态权限<二>之淘宝、京东、网易新闻 权限申请交互设计对比分析
移动智能设备的快速普及,给生活带来巨大的精彩,但是智能设备上用户的信息数据很多,隐私数据也非常多,各种各样的app可能通过各种方式在悄悄的收集用户数据,而用户的隐私就变得耐人寻味了.比如之前的可以无限 ...
- springmvc使用ajax进行数据交互时,session失效问题(@ResponseBody与session能否同时使用?)
今天做博客demo的时候遇到了这样的问题:当我用ajax进行资源请求时,需要顺便将账户信息存入session.但是后来发现有@Responsebody标签时,直接用HttpSession存数据时,根本 ...
- 【坚持】Selenium+Python学习记录 DAY11
2018/06/1-2018/06/4 参考资料: [菜鸟教程](http://www.runoob.com/python3/python3-examples.html) [Python解惑:True ...
- ats 转发代理
ats是一个通用代理,可配置为反向和转发代理; 转发代理可以用作基础架构中的中央工具来访问web, 它可以与缓存结合使用以降低 总体带宽使用率.转发代理充当本地网络上的客户端浏览器与这些客户端访问的所 ...
- 07-matplotlib-箱线图
import numpy as np import matplotlib.pyplot as plt ''' 箱形图(Box-plot)又称为盒须图,盒式图,或 箱线图: 是一种用在显示一组数据分散情 ...
- Bitcoin Core P2P网络层
目录 数据结构 节点发现和节点连接 地址管理 节点发现 节点连接 插口(Sockets)和消息 Socket线程 (net.cpp) 消息线程 ProcessMessages (net_process ...
- nodejs加载模块心得,mongoose的继承,schematype的mixd介绍
1. require("xxx")可以是原生模块, 也可以是根目录“/node_modules”下的某个模块 2. 多个模块的package.json使用同一个相同模块的时候,将改 ...
- jenkins设置定时任务
每次都手动的构建项目显然不够方便,有时候需要定时地执行自动化测试脚本.例如,每天晚上定时执行 pjenkins.py 文件来运行自动化测试项目. 设置定时任务 前面已经创建的 “python test ...
- 部署Maven项目到tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener【转】
部署Maven项目到tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLi ...