java构造函数,java的静态块理解
今天我遇到这样的代码块,理解甚久,现在理解了,举一些例题给你看看
先创建一个One类:
package accp.com;
/**
* 其中一个类
* @author xuxiaohua
*
*/
public class One {
public One(String str){ //定一个构造函数
System.out.println(str);
}
}
再创建一个Two类:
package accp.com;
public class Two {
One one=new One("one1");
One one2=new One("one2");
static One one3=new One("one3");//为什么这句话只执行了一次,是因为静态块只执行一次,是从java虚拟机开始加载的时候
public Two(String str){
System.out.println(str);
}
}
然后编写测试类:
package accp.com;
public class Test {
static Two two = new Two("two");//静态块是java加载时最先走的方法,所以这句话无论放在哪里,都先走的静态方法
public static void main(String args[]){
Two t=new Two("two2");
System.out.println("开始main方法=========");
Two tw=new Two("two3");
System.out.println("执行完毕。");
}
}
运行结果为:
one3------解释:静态块先执行,所以自然走到Two类中,然后Two类中也存在static One one3=new One("one3");静态的,所以先走这句话了。
one1------解释:测试类中,static Two two = new Two("two");中的Two two 是定义,所以先走定义的类Two然后执行里面的方法,注意不会出现one3了,因为静态块只执行一次
one2
two----解释:static Two two = new Two("two");前面的定义走完之后就走new Two("two");实例化对象,输出two
one1---解释:Two t=new Two("two2");跟上面一样,先看前半部分,Two t是定义变量,所以走Two中的方法,但不会执行静态块了,原因已说了,是因为静态块只执行一次。好了,前部分定义看完了,接着看实例化后半部分:new Two("two2");,实例化对象,然后输出two2
one2
two2
开始main方法=========//这几句话没啥可解释的吧!
one1------解释:理由同上
one2
two3
执行完毕。
最后总结那么几句:要想看明白,你需要理解静态块和构造函数,还有定义和实例化。
Two two;//这属于在定义一个变量
new Two();//属于在实例化Two对象,Two two=new Two();//合起来就是定义和实例化对象。
其次就是静态块了,静态块是在java加载的时候只运行一次的,并且是先执行的代码块。
学如逆水行舟,不进则退。
java构造函数,java的静态块理解的更多相关文章
- 【转】java对象——new对象的理解
学了好长时间的java对于java中的对象一直没有理清楚,今天楼主对java中的对象进行了整理,希望对大家有帮助. 理解和使用java中的对象,我们首先了解一下构造方法与对象的创建. 类是面向对象语 ...
- PHP与JAVA构造函数的区别
早期的PHP是没有面向对象功能的,但是随着PHP发展,从PHP4开始,也加入了面向对象.PHP的面向对象语法是从JAVA演化而来,很多地方类似,但是又发展出自己的特色.以构造函数来说,PHP4中与类同 ...
- 【转】关于Java的Daemon线程的理解
原文地址:http://www.cnblogs.com/ChrisWang/archive/2009/11/28/1612815.html 关于Java的Daemon线程的理解 网上对Java的Dae ...
- 创建Java类并实例化深入理解
package com.sanguosha.java; import java.util.Scanner;//导入包 public class TestPerson { public static v ...
- 深入理解Java虚拟机 - Java体系
使用JAVA已经快三年了,但说来惭愧,一直以来认为Java就是Java语言本身,最多再包括一个JVM,对于整个Java的体系结构还是不甚明了,现在有时间把<深入理解Java虚拟机>这本书读 ...
- Java内存管理的进一步理解-模拟过程图解
Java内存管理的进一步理解-模拟过程图解--转载 java的内存管理分为: 1.堆内存:2.栈内存:3.方法区:4.本地方法区 /* 1:方法区 方法区存放装载的类数据信息包括: ...
- Java编程的逻辑 (82) - 理解ThreadLocal
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- java构造函数修饰符
java 构造函数,可以被访问修饰符修饰,而不能被特殊修饰符修饰:(在编译器经过测试) 访问修饰符: public (最常用,其他类的任何位置都可以访问) protected(能够在同一包中被子类访问 ...
- 深入理解java虚拟机---java虚拟机内存管理(七)
本地方法栈.java堆.方法区 本地方法栈在HotSpot版本内与java虚拟机栈是合二为一的.不单独区分本地方法栈.但是java虚拟机中是有这样一块区域的. 作用: 1.本地方法栈为虚拟机栈执行ja ...
- java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同
java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同
随机推荐
- 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)
http://www.lydsy.com/JudgeOnline/problem.php?id=1089 题意:求深度为d的n元树数目.(0<n<=32, 0<=d<=16) ...
- 【TYVJ】1467 - 通向聚会的道路(spfa+特殊的技巧)
http://tyvj.cn/Problem_Show.aspx?id=1467 这题我并不是看题解a的.但是确实从题解得到了启发. 一开始我就想到一个正解,设d[i][0]表示i开始走过奇数个点的最 ...
- Thrift入门及Java实例演示
目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...
- ASP.NET C# 日期 时间 年 月 日 时 分 秒 格式及转换(转自happymagic的专栏)
在平时编码中,经常要把日期转换成各种各样的形式输出或保持,今天专门做了个测试,发现DateTime的ToString()方法居然有这么多的表现形式,和大家一起分享. DateTime time=Dat ...
- 关于sql语句的优化问题
系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not exists 修改方法如下: in的SQL语句 SELEC ...
- SQLServer触发器创建、删除、修改、查看示例代码
一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. 二: SQL Server为每个触发 ...
- Eclipse远程调试(远程服务器端监听)
前提:远程服务器上运行的WEB项目class对应的源码与本地项目中必须保持一致,也就是远程tomcat部署的项目就是本机项目打包过去的,而本机项目没有发生变动. 远程服务器端 服务器端配置eclips ...
- java.lang.String 类的所有方法
java.lang.String 类的所有方法 方法摘要 char charAt(int index) 返回指定索引处的 char 值. int codePointAt(int index) 返回指定 ...
- tomcat的安装
这个安装过程很清晰,转载一下:http://jingyan.baidu.com/article/8065f87fcc0f182330249841.html
- 滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之
一个莫名其妙的问题:错误 滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间. 参数名:ticks.这 网上找了很多,都没有一个正 ...