变量创建:
类型 变量名//创建(声明)某个类型变量
new 类型();//创建某个类型的对象(开辟某个类型空间)
Cat kitty = new Cat();
Cat smokey = new Cat();//创建了两个对象。对它们的引用(地址)被分配给两个不同的变量。
smokey = kitty;//然后我们将变量smokey 设置为对变量kitty 所引用的对象的引用。这两个变量现在都指向第一个创建的对象。
(因为第二个对象不再被任何地方引用,现在被认为是垃圾)
kitty = null;
变量作用域:
-
方法中声明的变量从其声明开始到方法结束都存在(可见)。
-
在代码块中声明的变量一直存在到代码块的末尾。
-
方法的参数在方法中无处不在。
-
对象中的变量在包含它们的对象的整个生命周期中都存在。它们的可见性也由特殊的访问修饰符定义:public和private。
-
静态(类)变量在程序运行的整个过程中都存在。它们的可见性也由访问修饰符定义。
修饰符
1.公共访问修饰符。
您可以在程序的任何位置使用标有 public 修饰符的变量、方法或类。这是最高级别的访问权限——这里没有任何限制。
2.私有访问修饰符。
您只能在声明它的类中使用带有 private 修饰符标记的变量或方法。对于所有其他类,标记的方法或变量将不可见,就好像它不存在一样。这是最高级别的封闭性——只能在它自己的类内访问。
3.无修饰符。
如果一个变量或一个方法没有用任何修饰符标记,它被认为是用“默认”访问修饰符标记的。此类变量和方法对声明它们的包中的所有类可见。并且仅对它们可见。这种访问级别有时称为“包私有”访问,因为对变量和方法的访问对包含它们的类的整个包是开放的。
引用变量地址问题
1、原始变量包含值(例:Cat),而引用变量(kitty)存储对对象的引用或 null。
2、当分配原始变量时,会复制值。如果分配了引用,则只会复制对象的地址。不会复制对象本身。
示例1m,n不变;
public class References
{
public static void main (String[] args)
{
int m = 5;
int n = 6;
System.out.println("M=" + m + " N=" + n);
swap(m, n);
System.out.println("M=" + m + " N=" + n);
}
private static void swap(int a, int b)
{
int c = a;
a = b;
b = c;
}
}
m依旧指向5,n依旧指向6;
仅分别将值 5 (m) 和 6 (n) 分配给变量 a 和 b; a 和 b 对 m 和 n 一无所知(也不以任何方式影响)。
示例 2
此代码中对象的数据更改
public class Primitives
{
public static void main(String[] args)
{
Student jen = new Student();
jen.name = “Jen”;
jen.age = 21;
Student beth = new Student();
beth.name = "Beth";
beth.age = 15;
System.out.println("Jen is " + jen.age);
System.out.println("Beth is " + beth.age);
ageSwap(jen, beth);
System.out.println("Jen is " + jen.age);
System.out.println("Beth is " + beth.age);
}
private static void ageSwap(Student a,
Student b)
{
int c = a.age;
a.age = b.age;
b.age = c;
}
static class Student
{
String name;
int age;
}
}
对 jen 和 beth 的引用分别分配给变量 a 和 b;a 和 b 更改对象 jen 和 beth 内的值。”