1.java 中静态代码块和非静态代码块。
静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。
public class Test {
public static int a = 0;
static {
a = 10;
System.out.println("父类的非静态代码块在执行a=" + a);
}
{
a = 2;
System.out.println("父类的非静态代码块在执行a=" + a);
}
public Test () {
this("a在父类带参构造方法中的值:" + Test.a); // 调用另外一个构造方法
System.out.println(a);
System.out.println("父类无参构造方法在执行a=" + a);
}
public Test (String n) {
System.out.println(n);
System.out.println(a);
}
public static void main(String[] args) {
Test tsc = null;
System.out.println("!!!!!!!!!!!!!!!!!!!!!");
tsc = new Test ();
}
}
运行结果:
父类的非静态代码块在执行a=10
!!!!!!!!!!!!!!!!!!!!!
父类的非静态代码块在执行a=2
a在父类带参构造方法中的值:10
2
2
父类无参构造方法在执行a=2
所以:
静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。
且执行 顺序为静态代码块------非静态代码块----构造函数。
静态代码块 与 静态方法:
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 作用:静态代码块可用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.
3. 应用
app端变更服务器地址
public class DD {
private static String HOST = "";
public static int IP_TYPE = 0; // 服务器类型 0, 1
static {
getIP();
}
public static void setType(int i) {
IP_TYPE = i;
}
public static String getIP() {
switch (IP_TYPE) {
case 0:
HOST = "http://192.168.1.100:8080/xxxx/xxx/";
break;
case 1:
HOST = "http://112.124.22.213/xxxx/xxx/";
break;
default:
break;
}
return HOST;
}
}
测试函数
public class TEST{
public static void main(String[] args) {
DD d1 = new DD();
System.out.println(d1.toString());
System.out.println(d1.getIP());
d1.setType(1);
System.out.println(d1.toString());
System.out.println(d1.getIP());
}
}
结果:
DD@4fb529d6
http://192.168.1.100:8080/Xxxx/Xxx/
DD@4fb529d6
http://112.124.22.213/xxxx/xxx/
说明,一个类的静态代码块在内存中,只有一个区域,改变代码块中的内容,不过是改变其中某项的索引指向,不会重新容间资源
类的内存空间中的地址是一样的
4. java中其他形式的代码块
一、普通代码块
直接在一个方法中出现的{}就称为普通代码块,例子程序如下:
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();
}
三:同步代码块
同步代码块主要出现在多线程中。
分享到:
相关推荐
特别是对于处理异常处理的`try-catch`语句,快速生成和编辑代码块是必不可少的功能。本篇文章将详细讲解如何在Android Studio中通过快捷键实现`try-catch`等代码块的创建和应用。 首先,我们知道`try-catch`语句...
- **检查项:** 注释是否清晰且必要、复杂流程是否有注释、长距离的代码块结束是否有注释等。 - **声明、空白、缩进:** 规范代码的格式,提高可读性。 - **重要性:** 高 - **检查项:** 变量声明、初始化、代码段落...
以下是针对STM32 Flash主存储块擦除编程操作的一些关键知识点: 1. **检查BSY位**:BSY(Busy)位是STM32的闪存编程和erase控制(FPEC)寄存器中的一个状态标志位。在BSY位为1时,表明闪存控制器正在进行操作,此时...
【国嵌全套实验代码】是一份综合性的资源,包含了针对国嵌(可能指的是国内某嵌入式教育机构)课程的完整实验代码。这些代码旨在帮助学习者深入理解嵌入式系统、Linux及其在实际项目中的应用。通过这些实验,学习者...
在深入探讨之前,首先我们需要了解Bitmap的一些基本概念。 Bitmap对象在内存中存储图像数据时,有多种不同的格式,每种格式定义了像素数据的排列方式。其中,ARGB_8888是最常见的一种,它代表每个像素由4个8位(1...
如果遇到不理解的部分,描述中也提供了"可联系"的途径,表示作者愿意解答疑问,这对于初学者来说是非常有益的资源。 【标签】"FLASH"、"俄罗斯方块"、"源代码"进一步明确了项目的内容。"FLASH"强调了技术背景,...
代码里最重要的板块在于通过函数递归实现的自动排雷功能——当玩家排查的坐标周围没有地雷时,能够主动将周围一块区域全部进行排查直到形成一个由地雷统计数字围成的一块区域。 本资源分享出来仅供大家参考,代码中...
通过编写条件判断和循环结构的代码,学生可以学习如何根据特定条件执行不同的代码块,以及如何重复执行某段代码直到满足特定条件。这部分的代码会涉及列表遍历、索引访问以及嵌套循环等概念。 实验3可能涉及到函数...
- **提问与交流**:向同事请教,尤其是与代码相关的疑问,可以快速理解代码意图。 - **代码审查**:参与或观察代码审查过程,了解团队的标准和最佳实践。 通过深入理解和熟练应用以上知识点,你不仅可以提高个人...
- 结构性检查:每个功能作为独立代码块,循环结构正确。 - 可追溯性检查:代码与文档之间有明确关联,有修订历史记录。 - 可理解性检查:注释清晰,代码简洁易懂,遵循统一的命名规则。 - 可验证性检查:代码...
从给定的文件标题“Java线程问题代码”和描述“Java线程问题代码详细解读,希望对各位有用处”,我们可以看出,这份代码是关于Java多线程编程的一个实例,旨在展示线程创建、运行以及线程间通信的一些基本概念和潜在...
在Java编程中,`switch`语句是一种非常有用的控制结构,它允许程序基于一个特定表达式的值来选择性地执行不同的代码块。相比于传统的`if-else`结构,`switch`语句提供了更加简洁和清晰的方式来处理多种情况的选择。...
这些结构使得程序可以根据不同条件执行不同的代码块,或重复执行某些任务,直到满足特定条件为止。 C++中的函数是代码重用的重要工具,允许我们将一组相关的操作封装在一起。函数可以接受参数,返回值,并且可以...
4. **代码块提示**:Scratch还会对未使用的或者类型不匹配的代码块给出提示,帮助孩子们避免常见的编程错误。 #### 三、使用错误提示理解错误 当代码中存在错误时,Scratch会自动提供错误提示。例如,在以下示例...
在重构的过程中,我们可以达到两个深度:第一种是继续使用if-else语句,但达到剥离执行代码块;第二种是使用工厂模式来耦合条件判断的代码块。我们可以通过示例代码,来了解如何重构掉这段代码,使得代码变得更加...
【描述】提到的"视频需要的留qq"可能暗示了该资源与一个在线课程或教学视频相关,学习者可以通过提供QQ联系方式获取进一步的教学支持或解答疑问。这表明这个源代码库不仅包含静态的学习材料,还可能配合动态的教学...
它可能包含一些测试用例,用于模拟不同类型的MPEG-4编码数据,确保解码器能正确地解析并还原视频帧。 3. **CVS**:CVS(Concurrent Version System)是一个版本控制系统,用于管理代码的变更历史。在这个目录下,...