Java:访问其他类中的属性和局部变量问题

Posted VipMao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:访问其他类中的属性和局部变量问题相关的知识,希望对你有一定的参考价值。

  在编程中,我们经常需要在程序中访问另一个类中的属性甚至需要访问其他类中的局部变量,可能有些人会说,访问其他类属性还可以,局部变量出了他的作用块还能访问?下面总结如何访问其他类中的属性和局部变量,以及访问过程中遇到的问题

一:访问其他类中的非私有属性。

  我们都知道,访问其他类中的成员属性时不能将属性声明为private,这是java中访问权限修饰符。


下面举例,如何访问其他类中的非私有成员属性。

1:Test.java

package com.mao.test;

public class Test

	//声明公有变量name
	public String name;
	//提供相应set、get方法
	public void setName(String name) 
	
		this.name = name;
	
	public String getName() 
	
		return name;
	
	public static void main(String[]args)
	
		Test test=new Test();
		//为公有变量赋值
		test.setName("VipMao");
		//在当前类中输出公有变量
		System.out.println(test.getName());
		//该类调用name变量
		Input input=new Input();
		//在调用类中输出变量
		input.input();
		
	
	

2:Input.java 该类调用name属性

package com.mao.test;

public class Input

	public void input()
	
		System.out.println(new Test().getName());
	


3:运行结果

VipMao
null


  有人会疑问,为name属性赋值后,为什么在当前类可以输出,在调用类中通过get()方法输出却为空,这是因为set()方法只是在当前类中为该属性赋值,该属性值只在当前类中有效,你在调用类中通过get()方法获取的仅仅是该name属性,而并不是name属性的值,因此会输出空,如果你想在调用类中设置属性并输出,还是需要通过该属性的set()方法设值,通过get()方法获取。

那咱们能不能为属性赋值后即使在别的类中也能调用该值?答案是有的,我们只需要将该属性指定为静态static,我们将程序改为:

Test.java

package com.mao.test;

public class Test

	//声明公有变量name
	public static String name;
	//提供相应set、get方法
	public void setName(String name) 
	
		this.name = name;
	
	public String getName() 
	
		return name;
	
	public static void main(String[]args)
	
		Test test=new Test();
		//为公有变量赋值
		test.setName("VipMao");
		//在当前类中输出公有变量
		System.out.println(test.getName());
		//该类调用name变量
		Input input=new Input();
		//在调用类中输出变量
		input.input();
		
	
	

  我们将name属性声明为静态,这样我们再通过set()方法为name赋值,这样这个name 属性的值就可以在其他类中引用了,Input类不做修改,我们再看输出结果:

VipMao
VipMao

可以看出,无论在当前类还是调用类都可以将name属性的值输出。

二:调用其他类中的局部变量

  我们也都知道,局部变量只在它所在的方法块或者说只在它的作用域值有效,一旦出来他的作用域,那就没法引用,相当于一个新变量,比如下面这个例子,将用户输入的用户名在当前类和调用类中输出

1:Test.java

package com.mao.test;

import java.util.*;

public class Test

	
	public void login()
		System.out.println("请输入用户名:");
		Scanner scanner=new Scanner(System.in);
		String inputName =scanner.next();
	
	public static void main(String[]args)
	
		Test test=new Test();
		test.login();
//		test.setName(inputName);
//		System.out.println(test.getName());
//		Input in=new Input();
//		in.input();
	
	


在上面程序中我们定义了一个局部变量inputName来获取用户输入的用户名,然后我们期望在该类和调用类中获取这个局部变量并输出他,但是很明显在获取局部变量时已经出了他的作用域,因此在注解部分就会报错,获取不到这个变量,程序没法在当前类中输出这个局部变量,更别提在其他类中了。


解决思路:上面也说了 静态变量一旦赋值,就可以在其他类中通过类名.属性名访问到这个属性值,那么咱们的思路就是:我们先在一个类中定义一个静态变量,然后再将局部变量赋值给该静态变量,这样我们在调用类中就可以直接通过类名.变量名进行获取。

关于静态变量的相关知识还不够了解的,可以参考本篇博文http://blog.csdn.net/vipmao/article/details/51059069

我们将程序改为:

1: Test.java

package com.mao.test;

import java.util.*;
public class Test

	//声明静态变量
	public static String name;
	
	public void login()
		System.out.println("请输入用户名:");
		Scanner scanner=new Scanner(System.in);
		String inputName =scanner.next();
		name=inputName;
	
	public static void main(String[]args)
	
		Test test=new Test();
		test.login();
		System.out.println(name);
		Input in=new Input();
		in.input();
	
	
  我们先声明了一个静态变量name,并将我们在login()方法内的局部变量inputName赋值给了静态变量name,这样我们就可以在该类或者其他类中调用这个静态变量了

2: Input.java

package com.mao.test;

public class Input

	public void input()
	
		//调用Test类中静态变量name
		System.out.println(new Test().name);
	


3: 输出结果


可以看出 调用成功。

以上是关于Java:访问其他类中的属性和局部变量问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 中的继承函数访问派生类中的局部变量

java基础之 变量

java基础二

JAVA-初步认识-第六章-成员变量和局部变量的区别

Java 类中的哪些变量构造函数可以访问?

java中局部变量和成员变量的区别?