1.局部变量
定义:在成员方法中定义的变量称为局部变量;(方法中的形参也可以作为局部变量)
例:
public void method1() { //n,i均为局部变量
int n;
for(int i=0;i<5;i++)
{
System.out.println("*");
}
for(int i=0;i<4;i++)
{
System.out.println("$"); //两个完全相同的局部变量在互不嵌套下可以多次声名定义
}
}
作用有效范围:局部变量在方法创建时生效,在方法结束时被销毁。
技巧:在互不嵌套的作用域中可以同时声名多个名称,类型相同的局部变量;但在相互嵌连的区域中不能重复定义。
2.静态变量与方法
定义:由关键字static修饰的变量、常量和方法被称为静态变量、常量、方法。
有时在处理问题时,会需要两个类在同一个内存区域共享一个数据。例如,在球类中使用PI这个常量,可能除了本类需要这个常量外,在另一个类中也需要这个常量。这时没有必要在两个类中同时创建PI这个常量,因为这样系统会将这两个不再同一个类中定义的常量分配到不同的内存空间中。为了解决这个问题,可以将该常量设置为静态的。所以静态数据与静态方法的作用通常是为了提供共享数据或方法。但静态成员同样遵循着public、private、protected修饰符的约束。
静态成员是属于类所有的,区别于个别对象。可以在本类或其他类使用类名和“.”运算符调用静态成员。 既:类名.静态成员
下看看一个代码:
public class Static1 {
int n;
String name;
static int pages; //静态变量
static int add;
public void method1() {
//static int author; 错误语句 //方法中不能定义静态变量
System.out.println(name);
method2(); //正确语句,非静态方法中可以调用静态方法
}
public static void method2() {
System.out.println(Static1.pages); //用类名.啥时必须该变量为静态变量
//method1(); // 错误语句,静态方法中不能调用非静态方法
}
public static void main(String[] args) {
Static1 book1=new Static1();
book1.name="钢铁是怎样炼成的"; //对象.调用,区别于类名.调用
Static1.add=15; //类名.调用
//Static1.n=5; //错误语句,非静态变量不能这样调用
}
以上代码表明了几个注意点:
1:静态方法中不能直接调用非静态方法,而非静态方法可以直接调用静态方法;
2:在静态方法中不能实用this关键字;
3:不能将方法体内的局部变量声名为static;
实用技巧:
如果在执行类时,希望先执行类的一个初始化部分,可以用static关键字封装起来,并且只会执行一次这部分
public class example{
static {
//some
}
}
这段代码中,会先执行some部分,而且只会被执行一次