Java笔试题笔记(1)

1、关于静态方法的代码分析题

public class Person{
    int arr[] = new int[10];
        public static void main(String a[]){
            System.out.println(arr[1]);
        }
}

运行结果

D:/>javac Person.java
Person.java:4: 无法从静态上下文中引用非静态 变量 arr
                        System.out.println(arr[1]);
                                           ^
1 错误

分析

类中有三种变量,局部变量、实例变量和类变量。其中,局部变量是定义在方法里的变量。实例变量是在方法外而在类声明内定义的变量,也叫成员变量,类变量是用关键字static声明的实例变量。 她们的生存期分别是:局部变量在定义该变量的方法被调用时被创建,而在该方法退出后被撤销,实例变量(成员变量)在使用new XXX()创建该类的实例时创建,其生存期和该类的实例对象的生存期相同,类变量在该类被加载时被创建,不一定要用new XXX()创建,所有该类的实例对象共享该类变量,其生存期是类的生存期。

 

任何变量在使用前必须被初始化,但是需要指出的是局部变量必须显式初始化,而实例变量不必,原始类型的实例变量在该类的构造方法被调用时为他分配默认值,整型是0,布尔型是false,而浮点型是0.0f,引用类型(类类型)是null(没有进行实际的初始化,对他的使用将引起NullPointException),类变量的规则和实例变量一样,不同的是类变量的初始化发生在类被加载时。

 

当遇到static ,final, finally这样的关键字时,一定要想想他的相关约束规则。

此处static静态方法中不能直接访问类的非静态成员,只能访问类成员,类的普通方法可以访问类的所有成员和方法,而静态方法只能访问类的静态成员和方法,因为静态方法属于类,而普通方法及成员变量属于类的实例,类方法(静态方法)不能使用属于某个不确定类的实例方法和变量, 在静态方法里没用隐含的this,而普通方法有。

 

2.关于静态变量的选择题

分析下面程序,请选择正确的输出结果

public class NameClass{
    private static int x;
    public static void main(String args[]){
        name(x);
        System.out.println(x);
    }

    public static void name(int x){
        x++;
    }
}

A.0   B.1  C.2  D.3

 

分析,注意陷阱,同名变量,作用域不一样,不是同一个变量。

在类NameClass中定义了一个静态变量x和一个静态方法name(int x),注意name()方法中的参数名与静态变量名是相同的,所以在进行x++运算时,改变的是参数x的值,而不是静态变量x的值。这时静态变量x还有另一种身份,即全局变量,当然参数x就是局部变量,他的使用范围仅在name()方法中,所以在main()方法中只能调用静态变量x。但是如果修改如下则选B

public class NameClass{
    private static int x;
    public static void main(String args[]){
        name(x);
        System.out.println(x);
    }

    public static void name(int y ){
        x++;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值