本节主要掌握静态方法对字符串和非字符串变量修改的区别,了解类对象和类属性的存储区,熟悉Static关键字的性质。
对象名称保存在栈中,对象的变量保存在堆中。
代码可以通过静态函数访问声明对象在堆中的属性,或者静态函数访问对象实现对象属性的改变。
但是,受限于String类型变量不能够改变,使用静态函数无法实现变量的重新赋值。
不过,若是String变量作为堆中的变量,即类属性,变量即可以被重复赋值,下面是代码示例。
package Static_Demo01;
class Ref01{
int tmp = 10;
String str1 = "Orchid";
}
public class Static_Class {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Ref01 r1 = new Ref01();
System.out.println(r1.tmp);
r1.tmp = 20;
System.out.println(r1.tmp);
myfunint(r1);
System.out.println(r1.tmp);
System.out.println(r1.str1);
myfunString(r1);
System.out.println(r1.str1);
String str2 = "Gladiola";
System.out.println(str2);
myfunString(str2);
System.out.println(str2);
}
public static void myfunint(Ref01 r) {
r.tmp = 30;
}
public static void myfunString(Ref01 r) {
r.str1 = "Bracketplant";
}
public static void myfunString(String r) {
r = "Cymbidium";
}
}
Static 关键字
1.声明的属性是全局属性;
2.声明的方法是可以通过类名直接调用的方法;
3.只能访问和调用static声明的属性和方法,非static声明方法是不可以被访问的。
class People{
static String addr = "QC";
public People(String name){
this.name = name;
}
public tell()
{
System,out.println(name+" : "+addr);
}
}
很明显,这里的addr变量,可以通过匿名对象、对象属性、定义set/get方法实现。静态属性可以被对象、类方法、类名直接修改。
主方法是静态方法,当自定义函数是一个非静态的或者某个变量是非静态的,被主函数调用时就会报错。