关于代码块的一些疑问

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();

  }


三:同步代码块
  同步代码块主要出现在多线程中。
<think>好的,我现在需要帮助用户了解如何在Markdown中使用Mermaid代码块,包括语法说明和示例。首先,我要回想用户的问题,用户提到了之前引用的一个VS Code插件,Markdown Preview Mermaid Support,所以可能需要具体说明如何在该插件下使用Mermaid。 用户可能需要基础的Mermaid语法教程,比如程图、序列图等的绘制方法。我需要确保回答结构清晰,分步骤说明,并且每个部分都有对应的示例代和效果图。同时,要提醒用户安装插件,因为这是使用Mermaid的前提。 接下来,我需要考虑用户可能的疑问,比如常见的图表类型,语法中的注意事项,例如节点命名、箭头类型等。此外,用户可能对如何在实际文档中应用Mermaid感兴趣,例如在VS Code中预览图表的方法。 还要检查是否需要补充其他资源,比如官方文档链接,方便用户进一步学习。同时,确保所有Mermaid代码块都用正确的格式包裹,即使用三个反引号加mermaid标签,并且在回答中正确展示示例代和效果描述,因为用户可能无法直接看到图片,所以需要用文字描述图表的结构。 最后,生成的相关问题要贴近用户可能遇到的后续疑问,比如如何调整样式、支持哪些图表类型等。需要确保引用标识正确,但根据用户提供的引用内容,可能只需要参考之前的插件信息,但实际回答中可能不需要具体引用,因为用户的问题更多是操作指导而非理论引用。</think># Mermaid代码块使用指南 ## 一、基础使用方法 1. 安装VS Code插件`Markdown Preview Mermaid Support` 2. 创建/打开`.md`文件 3. 使用代码块语法: ```mermaid graph LR A[开始] --> B(处理程) B --> C{判断条件} C -->|是| D[结果1] C -->|否| E[结果2] ``` 效果描述:生成带方形节点、圆形节点和菱形条件判断的程图[^1] ## 二、常用语法示例 ### 1. 程图(Flowchart) ```mermaid flowchart TD Start --> Input[/输入数据/] Input --> Process[数据处理] Process --> Output[\输出结果\] ``` ![程图示意图] ### 2. 序列图(Sequence Diagram) ```mermaid sequenceDiagram Alice->>John: 请求数据 John-->>Alice: 返回数据 loop 验证程 Alice->Alice: 数据校验 end ``` ![序列图示意图] ### 3. 甘特图(Gantt) ```mermaid gantt title 项目计划 dateFormat YYYY-MM-DD section 阶段A 任务1 :a1, 2023-08-01, 30d 任务2 :after a1, 20d section 阶段B 任务3 :2023-09-01, 12d ``` ![甘特图示意图] ## 三、语法要点 1. 节点定义: - `[矩形]`、`(圆角)`、`{菱形}`、`[/斜边/]`、`[\反向斜边\]` 2. 连接线类型: - `-->` 实线箭头 - `---` 无箭头实线 - `-.->` 虚线箭头 3. 注释支持: ```mermaid graph LR %% 这是注释 A--备注-->B ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值