java入门之代码块和全局变量/局部变量

博客介绍了Java中代码块和全局/局部变量的相关知识。代码块分为静态和非静态,静态代码块只在类加载时执行一次,非静态每次创建对象时执行。全局变量在类中声明,有默认值,作用于整个类;局部变量在方法等中定义,使用前需显式初始化,作用范围从定义处到语句块结束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、代码块

1、代码块:Java中代码块分为静态代码块和非静态代码块。
2、特点:静态代码块只在类加载时执行一次;静态代码块每次创建对象时都会执行。

    {
        System.out.println(age);
    }
    static {
        System.out.println(name);
    }
3static修饰符:可修饰变量,代码块,方法。
public class Dui {
    static int age=1;//成员变量被static修饰,则其被所有对象共享。

    //非静态数码块
    {
        int age = 1;//无初始值,且不能加访问控制符和static。
        System.out.println(age);
    }
    //静态的比非静态的早执行
    static int a=2;//加载时赋初值

    static {//加载时执行
        System.out.println(a);
    }

    public static void print(int age) {//类加载时分配地址
        System.out.println(age);
    }

    public static void main (String[] args) {//类加载时分配地址
        System.out.println(a);
        new Dui();//静态的可以通过对象创建,使用非静态的变量。
        new Dui().prints(14);//静态的可以通过对象创建,执行非静态的方法,不能直接调用(静态的先执行)
        print(24);//静态的可以直接调用静态方法。
    }

    //非静态
    int b =12;//创建对象时赋初值
    {
        System.out.println(b);//创建对象时执行
    }

    public void prints(int age) {//创建对象时分配地址
        System.out.println(age);
        print(12);//非静态的可以直接调用静态方法
        System.out.println(a);//非静态的可以直接使用静态变量
    }

二:全局变量/局部变量

1、全局变量:直接在类中声明的变量叫成员变量(又称全局变量)。注:如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而自定义类型则分配初始值null。
2、作用范围:成员变量定义后,其作用域是其所在的整个类。注:成员变量的定义没有先后顺序,但是最好将成员变量的定义集中在类的顶部。
3、局部变量:方法中的参数、方法中定义的变量和代码块中定义的变量统称为局部变量。注:局部变量在使用以前必须显式初始化或赋值,局部变量没有默认值。
注:声明局部变量时,数据类型前除final外不允许有其他关键字,即其定义格式为: [final] 数据类型 变量名 = 初始值;
4、作用范围:局部变量的作用域范围从定义的位置开始到其所在语句块结束。

//局部变量,只作用于所在代码块(即一个大括号),局部变量没有初始值,从定义到所属代码块结束。
    {
        int age = 1;//无初始值,且不能加访问控制符和static。
        System.out.println(age);
    }

5注意点:
1、如果局部变量的名字与全局变量的名字相同,则在局部变量的作用范围内全局变量被隐藏,即这个全局变量在同名局部变量所在方法内暂时失效。
2、如果在局部变量的作用域范围内访问该成员变量,则必须使用关键字this来引用成员变量。

    public static void print() {
        System.out.println(age);//当局部变量和全局变量重名时,(不强调数据类型),从局部变量定义到期结束作用范围,全局变量起作用,除非加上this.
        int age=9;
        System.out.println(age);
        if(age==1) {
            String names ="wangming";
            System.out.println(names);
        }

    }
### Java全局变量局部变量的区别 #### 定义差异 在 Java 编程语言中,**全局变量**实际上是指类中的成员变量(也称为字段),它们可以在整个类的作用范围内被访问。如果这些变量被 `static` 关键字修饰,则被称为类级别的全局变量[^5]。 相比之下,**局部变量**是在方法、构造器或语句块内部定义的变量。这类变量仅在其所在的代码块内有效,并且其生命周期局限于该代码块的执行期间[^2]。 --- #### 存储位置与初始化 - **全局变量**存储于堆内存区域,在类加载时完成分配并默认具有初始值(例如整型为 0,默认布尔值为 false)。即使未显式赋值,也可以安全地读取。 - **局部变量**则位于栈内存上,只有当所在的方法被执行时才会为其分配空间。需要注意的是,局部变量必须显式初始化后才能使用,否则编译阶段会出现错误提示。 --- #### 生命周期比较 由于两者存放在不同的内存区段,因此它们的生命期也有显著差别: - 对于**全局变量**而言,只要所属的对象还存在于运行环境中或者对于静态类型的全局变量来说直到应用程序结束之前都一直保持可用状态; - 而关于**局部变量**,一旦离开它所处的那个特定范围即刻销毁释放资源不再保留任何数据信息[^4]。 --- #### 访问权限控制 通过设置合适的访问修饰符(private, protected, public),可以精确管理哪些外部组件能够触及到某些指定的全局属性;然而针对临时性的计算结果保存下来的那些本地量就没有这样的灵活性了——因为无论如何也无法超越当前函数边界之外去获取它们的内容[^3]。 --- #### 使用场景分析 考虑到上述特性之间的异同点,在实际开发过程中可以根据具体需求合理选用合适种类的数据结构形式来进行编码实现工作: - 如果希望共享多个方法之间共同使用的参数或者是持久化的配置选项之类的常驻型资料的话那么就应该考虑采用成员级别以上的广度覆盖式的储存单位也就是我们常说的那种所谓的“全局”概念下的实体对象表示法; - 反之如果是仅仅为了满足单一操作流程内的中间过渡处理逻辑需要用到一些辅助性质的小规模暂态记录单元的时候就非常适合运用限定较小私密程度较高的短周期存在的个体表达手段即所谓的地方性约束条件下的个人专属领地划分策略[^1]。 ```java // 示例代码展示两种变量的应用场合 public class VariableExample { private static int globalVar; // 类级全局变量 public void exampleMethod() { int localVar = 10; // 方法体内定义的局部变量 System.out.println(localVar); // 正确:局部变量已初始化 //System.out.println(globalVar); // 默认值为0无需单独初始化即可打印出来 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值