相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,
创新互联服务项目包括灵武网站建设、灵武网站制作、灵武网页制作以及灵武网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,灵武网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到灵武省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
一般在代码块中对一些static变量进行赋值。
不同点:静态代码块在非静态代码块之前执行(静态代码块—非静态代码块—构造方法)。
静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new
一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。
例:
//普通类
public class PuTong {
public PuTong(){
System.out.print("默认构造方法!--");
}
//非静态代码块
{
System.out.print("非静态代码块!--");
}
//静态代码块
static{
System.out.print("静态代码块!--");
}
public static void test(){
{
System.out.println("普通方法中的代码块!");
}
}
}
//测试类
public class TestClass {
/**
* 区别两次new静态与非静态代码块执行情况
*/
public static void main(String[] args) {
PuTong c1 = new PuTong();
c1.test();
PuTong c2 = new PuTong();
c2.test();
}
}
/*
运行输出结果是:
静态代码块!--非静态代码块!--默认构造方法!--普通方法中的代码块!
非静态代码块!--默认构造方法!--普通方法中的代码块!
*/
静态绑定:例如一个变量在声明的时候,就初始化最初值;
动态绑定:声明一个变量,在后续用set方法对其动态设置值;
静态编译:编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。
动态编译:某些程式语言在执行时用来增进效能的方法。
前绑定:还未出现即绑定了某些事件
后绑定:出现后才会绑定的某些事件
JAVA本身就是表态编译语言, 我想你要找的是JAVA程序的发布
首先JAVA程序运行肯定需要在目标机器上有jre(不是JDK), 如果你想不管目标机上有没有jre程序都能正常运行的话就要在你的发布包里包含jre
发布目录结构举例:
App
......bin 包含启动脚本
......lib 包含引入的第三方包
......jre JRE必要的包
启动脚本这样写:
../jre/bin/java -cp ../lib/JAR包名称.jar 启动类名称
java静态初始化器对static进行初始化。
所谓的静态和动态是相对于程序运行是而言的,静态是在程序编译时就初始化好了的,动态初始化是在程序运行是才动态分配内存空间。
static变量初始值一定要是常量。static变量中文名叫静态变量。位置静态局部变量被编译器放在全局存储区.data,所以它虽然是局部的,但是在程序的整个生命周期中存在。
作用:
对于静态全局变量来说,针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域。
对于静态局部变量来说,在函数内以static声明的变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内)。
但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同,且两次调用间变量值始终保持一致;必须注意,静态局部变量只能初始化一次,这是由编译器来保证实现。
对于静态成员变量来说,在C++中,在类的定义中以static声明的成员变量属于类变量,也即在所有类实例中共享,与之相对的就是过程变量。