面向对象04-变量作用域-Java

本文介绍了Java中变量的作用域分类(全局变量和局部变量),强调了它们的区别,包括默认值、赋值要求、命名规则以及生命周期。还提到了修饰符对全局变量的影响以及不同作用域的范围和可访问性。

变量作用域

1. 在java编程中,主要的变量就是属性(成员变量)和局部变量。
2. 局部变量一般是指在成员方法中定义的变量。【举例Cat类: cry】
3. java中作用域的分类
全局变量:也就是属性,作用域为整个类体【举例:Cat类 cry eat等方法使用属性】
局部变量:也就是除了属性之外的其他变量,作用域为定义它的代码块中
4. 全局变量(属性)可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用,因为没有默认值。【举例】

  • 补充说明 2、3
	public class VarScope {
		public static void main(String[] args){
		}
	}
	
	class Cat {
		//全局变量:也就是属性,作用域为整个类体
		//属性在定义时,可以直接赋值
		int age = 10; 
		public void eat() {
			System.out.println("在eat中使用属性 age = "+age);//全局变量age
		}
	
		public void cry() {
			//2. 局部变量*一般*是指在成员方法中定义的变量
			// n name是局部变量
			// n name作用于只能在cry方法中
			int n = 10;
			String name = "jack";
	
			System.out.println("在cry中使用属性 age = "+age);//全局变量age
	
		}
	}
  • 补充说明 4
    全局变量(属性)可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用,因为没有默认值
	class Cat {
		double weight; //全局变量:默认值是0.0
	
		public void hi() {
			int num;
			System.out.println("num=" + num);
		}
	}

weight 是全局变量:默认值是0.0。
num 是局部变量,没有默认值,不能直接使用。

5. 属性和局部变量可以重名,访问时遵循就近原则。
6. 在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名。[举例]
7. 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。
局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁。即在一次方法调用过程中。

  • 补充说明5
    (1)会输出 king
	public class VarScope {
		public static void main(String[] args){
			Person p1 = new Person();
			p1.say();
		}
	}
	
	class Person {
		String name = "jack";
	
		public void say() {
			String name = "king"; 
			System.out.println(name); 
		}
	}

(2)会输出 jack

	public class VarScope {
		public static void main(String[] args){
			Person p1 = new Person();
			p1.say();
		}
	}
	
	class Person {
		String name = "jack";
	
		public void say() {
			System.out.println(name); 
		}
	}

8. 作用域范围不同
全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)
局部变量:只能在本类中对应的方法中使用
9. 修饰符不同
全局变量/属性可以加修饰符(public、private、protected、默认)
局部变量不可以加修饰符

  • 补充说明8 全局变量/属性:可以被其他类使用
	public class VarScope {
		public static void main(String[] args){
			T t1 = new T();
			t1.test();
	
			Person pp = new Person();
			t1.test2(pp);
		}
	}
	
	class T {
		public void test() {
			Person p1 = new Person();
			System.out.println(p1.name); 
		}
	
		public void test2(Person p) {
			System.out.println(p.name); 
		}
	}
	class Person {
		String name = "jack";
	}

在这里插入图片描述

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值