Java的4种代码块
2015-06-30 23:52
561 查看
Java的4种代码块
一、普通代码块
直接在一个方法中出现的{}就称为普通代码块,例子程序如下:
public class CodeDemo01{
public static void main(String[] args){
//普通代码块
{
int x = 10;
System.out.println("x=" + x);
}
int x = 100;
System.out.println("x=" + x);
}
}
二、构造代码块
直接在类中定义的没有加static关键字的代码块{}称为构造代码块,例子程序如下:
public class CodeDemo02{
public CodeDemo02(){
System.out.println("========这是构造方法=========");
}
//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
{
System.out.println("=========这是构造块!=========");
}
public static void main(String[] args){
new CodeDemo02();
new CodeDemo02();
}
}
三、静态代码块
使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化,例子程序如下:
public class CodeDemo03
{
static{
System.out.println("这是主类中的静态代码块!");
}
public static void main(String[] args){
new Demo();
new Demo();
new Demo();
}
}
class Demo
{
static{
System.out.println("这是Demo类中的静态代码块!");
}
{
System.out.println("这是Demo类中的构造块!");
}
public Demo(){
System.out.println("这是构造方法!");
}
}
静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
四、同步代码块
同步代码块主要出现在多线程中。
下面是相关例子:
public class Main{
{
System.out.println("构造块");
}
static{
System.out.println("静态代码块");
}
public Main(){
System.out.println("构造函数");
}
public static void main(String args[]){
Main m;
}
}
执行结果为:
静态代码块
为什么呢,程序里面只是申请了一个引用,但是并没有实例化,这说明构造方法和构造块都是在实例化时调用的,而静态代码块不是,分析内存知道,静态的并不属于对象,而是属于类,不论实例化多少对象,静态的内存只有一个,在出现声明引用的时候即分配内存!
再看下面例子:
public class Main{
{
System.out.println("构造块");
}
static{
System.out.println("静态代码块");
}
public Main(){
System.out.println("构造函数");
}
public static void main(String args[]){
Main m=new Main();
}
}
这个程序跟上面那个比较只是实例化了一个对象,为对象分配了内存,那么看执行结果:
静态代码块
构造块
构造函数
这个说明了一个问题:在程序执行过程中,静态代码块优于构造块,构造块优于构造函数执行。
再看下面代码:
public class Main{
{
System.out.println("构造块");
}
static{
System.out.println("静态代码块");
}
public Main(){
System.out.println("构造函数");
}
public static void main(String args[]){
Main m=new Main();
Main m1=new Main();
}
}
此代码与上面代码相比较是实例化了两个对象,那么看执行结果:
静态代码块
构造块
构造函数
构造块
构造函数
此结果足以说明一个问题:静态代码块不论实例化多少对象,只调用一次!而其他的执行多次!
注:静态代码块是在main方法执行之前执行的!
转载自: http://blog.sina.com.cn/s/blog_6730a3aa0100wmv0.html 转载自:http://www.cnblogs.com/end/archive/2012/12/21/2827554.html
一、普通代码块
直接在一个方法中出现的{}就称为普通代码块,例子程序如下:
public class CodeDemo01{
public static void main(String[] args){
//普通代码块
{
int x = 10;
System.out.println("x=" + x);
}
int x = 100;
System.out.println("x=" + x);
}
}
二、构造代码块
直接在类中定义的没有加static关键字的代码块{}称为构造代码块,例子程序如下:
public class CodeDemo02{
public CodeDemo02(){
System.out.println("========这是构造方法=========");
}
//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
{
System.out.println("=========这是构造块!=========");
}
public static void main(String[] args){
new CodeDemo02();
new CodeDemo02();
}
}
三、静态代码块
使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化,例子程序如下:
public class CodeDemo03
{
static{
System.out.println("这是主类中的静态代码块!");
}
public static void main(String[] args){
new Demo();
new Demo();
new Demo();
}
}
class Demo
{
static{
System.out.println("这是Demo类中的静态代码块!");
}
{
System.out.println("这是Demo类中的构造块!");
}
public Demo(){
System.out.println("这是构造方法!");
}
}
静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
四、同步代码块
同步代码块主要出现在多线程中。
下面是相关例子:
public class Main{
{
System.out.println("构造块");
}
static{
System.out.println("静态代码块");
}
public Main(){
System.out.println("构造函数");
}
public static void main(String args[]){
Main m;
}
}
执行结果为:
静态代码块
为什么呢,程序里面只是申请了一个引用,但是并没有实例化,这说明构造方法和构造块都是在实例化时调用的,而静态代码块不是,分析内存知道,静态的并不属于对象,而是属于类,不论实例化多少对象,静态的内存只有一个,在出现声明引用的时候即分配内存!
再看下面例子:
public class Main{
{
System.out.println("构造块");
}
static{
System.out.println("静态代码块");
}
public Main(){
System.out.println("构造函数");
}
public static void main(String args[]){
Main m=new Main();
}
}
这个程序跟上面那个比较只是实例化了一个对象,为对象分配了内存,那么看执行结果:
静态代码块
构造块
构造函数
这个说明了一个问题:在程序执行过程中,静态代码块优于构造块,构造块优于构造函数执行。
再看下面代码:
public class Main{
{
System.out.println("构造块");
}
static{
System.out.println("静态代码块");
}
public Main(){
System.out.println("构造函数");
}
public static void main(String args[]){
Main m=new Main();
Main m1=new Main();
}
}
此代码与上面代码相比较是实例化了两个对象,那么看执行结果:
静态代码块
构造块
构造函数
构造块
构造函数
此结果足以说明一个问题:静态代码块不论实例化多少对象,只调用一次!而其他的执行多次!
注:静态代码块是在main方法执行之前执行的!
转载自: http://blog.sina.com.cn/s/blog_6730a3aa0100wmv0.html 转载自:http://www.cnblogs.com/end/archive/2012/12/21/2827554.html
相关文章推荐
- Struts1 Spring2 iBatis2 框架的集成
- SpringMVC第一次搭建
- Java基础---IO流
- [转载] Java NIO与IO
- [Java]学习笔记,随笔【七】
- 疯狂Java讲义-面向对象(1 of n)
- Java 包的使用
- java eclipse 整个项目或包查找只定字符串并替换
- 学习笔记_Java_day13_JSTL_自定义标签库(9)
- Struts2框架学习之OGNL表达式
- 学习笔记_Java_day13_JSTL标签库(1、2、3、4、5、6、7、8)
- java 类中构造函数的讲解
- SSH-struts2的异常处理
- Java-在线聊天系统-非线程
- Spring boot 整合spring Data JPA+Spring Security+Thymeleaf框架(上)
- MAC常用java开发软件
- Java学习日记之方法
- java中的set集合
- 黑马程序员-java-小天教你使用eclipse
- java中的“异常”