java中静态代码块
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于java中静态代码块内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在java中静态代码块相关知识领域提供全面立体的资料补充。同时还包含 j2ee是什么、jar格式、java 的知识内容,欢迎查阅!
java中静态代码块相关知识
-
【Java基础】Java中静态代码块、构造代码块、构造函数、普通代码块内容大纲一、静态代码块①、格式在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块:public class CodeBlock { static{ System.out.println("静态代码块"); } }②、执行时机静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类中有多个静态代码块,会按照书写顺序依次执行。后面在比较的时候会通过具体实例来证明。这里再强调一次,静态代码块在类被加载的时候只运行一次。③、静态代码块的作用一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。④、静态代码块不能存
-
JAVA之——static静态代码块静态代码块static可以修饰属性、方法、内部类、代码块静态代码块在类加载时就调用, 而且只执行一次, 并且优先于各种代码块以及构造函数。有一个地方的静态代码被使用,那么所有的静态代码块都会被调用下面通过实例理解一下父类public class Human { static { System.out.println("2.父类中的静态代码块"); } public String name; public Human() { System.out.println("1.父类中的构造方法"); } public static void test() {
-
java——局部代码块、静态代码、构造代码块package codeBlock; public class CodeBlockTester { public static void main(String[] args) { //主方法中的局部代码块:限定变量的声明周期,提早释放内存 { String hello = "主方法中的局部代码块"; System.out.println(hello); } Son s1 = new Son(); System.out.println("\n---静态代码块在类加载的时候执行,只执行一次---\n"); Son s2 = new Son(); } //测试类中的静态代码块:类加载时候执行,只执行一次 static { System.out.println("测试类中的静
-
Java——静态代码块、构造代码块、构造函数以及Java类初始化顺序原文地址:http://www.cnblogs.com/Qian123/p/5713440.html静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。回到顶部构造函数public HelloA(){//构造函数 }关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。2.构造函数的作用是用于给对象进行初始化。3.一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次。回到顶部构造代码块{//构造代码块 }关于构造代码块,以下几点要注意:构造代码块的作用是给对象进行初始化。对象一建立就运行构造代码块了,而且优先于构造函数执行。这里要强调一下,有对象建立,才会运行构造代码块,类不能调用构造代码块的,而且构造代码块与构
java中静态代码块相关课程
java中静态代码块相关教程
- 5. 静态方法 通过 static 关键字来创建类的静态成员,这些属性存在于类本身上面而不是类的实例上。class User { static getInformation () { return 'This guy is too lazy to write anything.' }}User.getInformation() // OKconst user = new User()user.getInformation() // Error 实例中无此方法代码解释: getInformation() 方法被定义为静态方法,只存在于类本身上,类的实例无法访问。静态方法调用同一个类中的其他静态方法,可使用 this 关键字。class StaticMethodCall { static staticMethod() { return 'Static method has been called' } static anotherStaticMethod() { return this.staticMethod() + ' from another static method' }}代码解释: 静态方法中的 this 指向类本身,而静态方法也存在于类本身,所以可以在静态方法中用 this 访问在同一类中的其他静态方法。非静态方法中,不能直接使用 this 关键字来访问静态方法。而要用类本身或者构造函数的属性来调用该方法:class StaticMethodCall { constructor() { // 类本身调用 console.log(StaticMethodCall.staticMethod()) // 构造函数的属性调用 console.log(this.constructor.staticMethod()) } static staticMethod() { return 'static method has been called.' }}代码解释: 类指向其构造函数本身,在非静态方法中,this.constructor === StaticMethodCall 为 true, 也就是说这两种写法等价。
- 7. 动态代理 现在我们需求又增加了,现在需要增加多个代理中介,可能有很多小伙伴就说再去按照规则增加几个代理类就可以了。尽管 Kotlin 能解决 Java 中需要编写很多样板代码的问题,但是始终还是静态的。所谓静态就是代理者类是需要开发者自己手动编写,在代码运行前代理类的 class 编译文件就已经存在。甚至,可能不是编译前就能决定的代理类的个数,而是在运行时确定增加代理中介的个数,面对这样场景,静态代理可能就无能为力,那么就引出下面的动态代理
- 2.2 静态内部类 2.2.1 定义静态内部类也称为嵌套类,是使用 static 关键字修饰的内部类。如下代码中定义了一个静态内部类:public class Car1 { // 静态内部类 static class Engine { public void run() { System.out.println("我是静态内部类的run()方法"); System.out.println("发动机启动了"); } }}2.2.2 实例化静态内部类的实例化,可以不依赖外部类的对象直接创建。我们在主方法中可以这样写:// 直接创建静态内部类对象Engine engine = new Engine();// 调用对象下run()方法engine.run();运行结果:我是静态内部类的run()方法发动机启动2.2.2 成员的访问在静态内部类中,只能直接访问外部类的静态成员。例如:719在 run() 方法中,打印的 name 属性就是外部类中所定义的静态属性 name。编译执行,将会输出:外部类的静态属性name对于内外部类存在同名属性的问题,同样遵循就近原则。这种情况下依然希望调用外部类的静态成员,可以使用外部类名.静态成员的方式来进行调用。这里不再一一举例。如果想要访问外部类的非静态属性,可以通过对象的方式调用,例如在 run() 方法中调用 Car1 的实例属性 brand:public void run() { // 实例化对象 Car1 car1 = new Car1(); System.out.println(car1.brand);}
- 2.1 代码块 在 Markdown 文件中,在行首添加 4 个连续的空格,可将行内容定义为代码块。实例 1:#### 使用空格定义代码块 pubic static void main(String[] args) { System.out.println("Hello world"); }其渲染结果如下:注意:Typora 编辑器在默认模式(实时渲染模式)下无法通过此方法生成代码块,需要先切换到源代码模式(「显示」->「源代码模式」)后添加空格。该源码渲染输出 html 的内容如下:<pre><div><span><span>pubic static void main(String[] args) {</span></span></div><div><span><span> </span><span>System.out.println("Hello world");</span></span></div><div><span><span>}</span></span></div></pre>代码块的另一种定义方式是以三个连续的 「反引号 “`”」 作为开始行和结束行。实例 2:#### 使用反引号定义代码块```pubic static void main(String[] args) { System.out.println("Hello world");}```其渲染结果如下:在这种方式下,我们还可以声明代码的高亮样式,方法是在首行的连续的三个 「反引号 “`”」 后面加入源代码语言的标记,比如:javascript、Markdown、json、java、c++、sql 等,具体支持的种类和使用的 Markdown 编辑器或渲染程序配置有关。实例 3:#### 使用反引号定义代码块,并定义高亮```javapubic static void main(String[] args) { System.out.println("Hello world");}```其渲染结果如下:
- 6.1 Java 实现静态代理 在 Java 中实现静态代理还是比较简单,只要按照上述 UML 中分析角色规则来定义就能轻松实现。这里就用 Java 先去实现上述例子://IPurchaseHouse: 抽象买房接口interface IPurchaseHouse { void inquiryPrice();//询价 void visitHouse();//看房 void payDeposit();//付定金 void signAgreement();//签合同 void payMoney();//付钱 void getHouse();//拿房}//HouseOwner: 房子拥有者(房东)class HouseOwner implements IPurchaseHouse {//实现IPurchaseHouse共同接口 @Override public void inquiryPrice() { System.out.println("HouseOwner提出房子价格: 200W RMB"); } @Override public void visitHouse() { System.out.println("HouseOwner同意买房者来看房子"); } @Override public void payDeposit() { System.out.println("HouseOwner收了买房者1W RMB定金"); } @Override public void signAgreement() { System.out.println("HouseOwner与买房者签订合同"); } @Override public void payMoney() { System.out.println("买房者付钱给HouseOwner"); } @Override public void getHouse() { System.out.println("买房者拿到房子"); }}//HouseAgent: 房产中介class HouseAgent implements IPurchaseHouse { private IPurchaseHouse mHouseOwner;//具体房东HouseOwner被代理对象引用 public HouseAgent(IPurchaseHouse houseOwner) { mHouseOwner = houseOwner; } @Override public void inquiryPrice() { mHouseOwner.inquiryPrice();//通过具体房东HouseOwner引用去调用inquiryPrice } @Override public void visitHouse() { mHouseOwner.visitHouse();//通过具体房东HouseOwner引用去调用visitHouse } @Override public void payDeposit() { mHouseOwner.payDeposit();//通过具体房东HouseOwner引用去调用payDeposit } @Override public void signAgreement() { mHouseOwner.signAgreement();//通过具体房东HouseOwner引用去调用signAgreement } @Override public void payMoney() { mHouseOwner.payMoney();//通过具体房东HouseOwner引用去调用payMoney } @Override public void getHouse() { mHouseOwner.getHouse();//通过具体房东HouseOwner引用去调用getHouse }}//Client客户类class Client { public static void main(String[] args) { IPurchaseHouse houseOwner = new HouseOwner(); IPurchaseHouse houseAgent = new HouseAgent(houseOwner);//传入具体被代理类实例 houseAgent.inquiryPrice();//询问价格 houseAgent.visitHouse();//看房 houseAgent.payDeposit();//支付定金 houseAgent.signAgreement();//签合同 houseAgent.payMoney();//付钱 houseAgent.getHouse();//拿房 }}运行结果:HouseOwner提出房子价格: 200W RMBHouseOwner同意买房者来看房子HouseOwner收了买房者1W RMB定金HouseOwner与买房者签订合同买房者付钱给HouseOwner买房者拿到房子Process finished with exit code 0这就是静态代理具体的实现,可能有些并不能看到代理模式所带来的好处,看上去就像是代理类做了实际转发调用而已。实际上有个很明显优点就是: 可以在 HouseAgent 类中整个流程插入一些特有的操作或行为,而不会影响内部 HouseOwner 的实现,保护内部的实现。 还有一个优点就是代理类在保证 HouseOwner 核心功能同时可以扩展其他行为。上述结论可能有点抽象,假如现在有个不一样需求比如 A 房产中介,在看房之前首先得签订一个看房协议,但是这个协议只涉及购买用户与中介之间的协议。所以基于代理模式很轻松就实现。//修改后的HouseAgentAclass HouseAgentA implements IPurchaseHouse { private IPurchaseHouse mHouseOwner;//具体房东HouseOwner被代理对象引用 private boolean mIsSigned; public HouseAgentA(IPurchaseHouse houseOwner) { mHouseOwner = houseOwner; } @Override public void inquiryPrice() { mHouseOwner.inquiryPrice();//通过具体房东HouseOwner引用去调用inquiryPrice } @Override public void visitHouse() { if (mIsSigned) { System.out.println("您已经签订了看房协议,可以看房了"); mHouseOwner.visitHouse();//通过具体房东HouseOwner引用去调用visitHouse } else { System.out.println("很抱歉,您还没签订了看房协议,暂时不能看房"); } } public void signVisitHouseAgreement(boolean isSigned) { mIsSigned = isSigned; } @Override public void payDeposit() { mHouseOwner.payDeposit();//通过具体房东HouseOwner引用去调用payDeposit } @Override public void signAgreement() { mHouseOwner.signAgreement();//通过具体房东HouseOwner引用去调用signAgreement } @Override public void payMoney() { mHouseOwner.payMoney();//通过具体房东HouseOwner引用去调用payMoney } @Override public void getHouse() { mHouseOwner.getHouse();//通过具体房东HouseOwner引用去调用getHouse }}//Client客户类class Client { public static void main(String[] args) { IPurchaseHouse houseOwner = new HouseOwner(); IPurchaseHouse houseAgent = new HouseAgentA(houseOwner);//传入具体被代理类实例 houseAgent.inquiryPrice();//询问价格 ((HouseAgentA) houseAgent).signVisitHouseAgreement(true);//签订看房合同 houseAgent.visitHouse();//看房 houseAgent.payDeposit();//支付定金 houseAgent.signAgreement();//签合同 houseAgent.payMoney();//付钱 houseAgent.getHouse();//拿房 }}运行结果:HouseOwner提出房子价格: 200W RMB您已经签订了看房协议,可以看房了HouseOwner同意买房者来看房子HouseOwner收了买房者1W RMB定金HouseOwner与买房者签订合同买房者付钱给HouseOwner买房者拿到房子Process finished with exit code 0
- 4.2 类引用静态方法 类引用静态方法,请查看以下实例:1225运行结果:-11查看 Java 源码,可观察到compare()方法是静态方法:我们再来看一个实例:1226运行结果:12
java中静态代码块相关搜索
-
j2ee
j2ee是什么
jar格式
java
java api
java applet
java c
java jdk
java list
java map
java script
java se
java socket
java swing
java switch
java web
java xml
java 程序设计
java 多线程
java 环境变量