简简单单整理一下咱们的小作业,这次的作业比较简单,只有选择题:
public class Test{
private float f=1.0f;
int m=12;
static int n=1;
public static void main(String args[]){
Test t=new Test();
}
}
A:抛开private不说,先看变量类型,f定义的是float类型,但是所有的浮点数(这里的3.0)在java中都默认为double类型,所以在这里赋值这一步就出错了。
B:n被static修饰,是静态的,我们之前讲过:静态的成员变量是属于类的,它应该通过类名访问,而不能用this。
C:m是实例成员变量,需要通过对象来进行调用。t.m。
D:静态成员变量通过类名访问,所以D√。
public class Pvf{
static boolean Paddy;
public static void main(String args[]){
System.out.println(Paddy);
}
}
当你编译和运行下面的代码时,会出现下面选项中的哪种情况?
首先我们清楚的是,Paddy是一个静态成员变量,跟上一题一样,静态成员变量一般通过类名访问,但是这里我们的main方法写在类的内部,所以我们可以直接使用成员变量名来访问调用;
其次,这个成员变量并没有进行初始化,那么我们的系统会给予它一个默认初始化的值,再看它的变量类型是boolean,对应的初始化的值是false,因此B√。
public class Test {
public int aMethod(){
static int i = 0;
i++;
return i;
}
public static void main(String args[]){
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
}
}
如下代码的输出结果是什么?
依然是静态变量的问题,在java中我们为什么说静态变量属于类,正是因为它被要求在类的内部创建,而方法内部创建的变量我们称作局部变量,简单说:方法内不能创建静态变量,因为局部的静态变量是不被允许的。因此D√。
修改方式:将static语句提到方法外部。
package NowCoder;
class Test {
public static void hello() {
System.out.println("hello");
}
}
public class MyApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test=null;
test.hello();
}
}
阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()
还是static静态的问题,这里的hello()是一个静态的成员方法,我们在调用这个方法的时候一般使用类名调用,即Test.hello(),这里对Test进行实例化之后,哪怕表示test这个引用不指向任何对象,也对我们的调用没有影响,因为我们的方法是静态的,不需要通过对象访问。所以A√。
public static void main(String[] args){
String s;
System.out.println("s="+s);
}
下面代码的运行结果是()
送分题,没有初始化,编译不能通过,C√。
诶有人会问——不是说系统会给它默认初始化的值吗?注意嗷:那是成员变量的初始化规则,也就是类里面创建的变量,但是这里是main方法,创建的是局部变量,局部变量不会有默认初始化!!!!
public class HasStatic {
private static int x = 100;
public static void main(String args[]) {
HasStatic hsl = new HasStatic();
hsl.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hsl = new HasStatic();
hsl.x++;
HasStatic.x--;
System.out.println(" x=" + x);
}
}
关于以下程序代码的说明正确的是()
本题中的静态成员变量x,属于类变量,只有一份。所有对x的操作针对的都是同一份。
静态成员变量的访问需要通过类名访问,这是正确的访问方式。本题中虽然使用了对象引用访问,但是不会报错,我们不建议这样访问,但不是错误,所以,不会编译报错。
所以得出结论:本题可以正常通过编译和运行,输出结果是102,A√。
第七题
下面哪一项不是 java 类访问控制关键字
Java中的访问修饰符有3个:private,public,protected,但是当定义一个成员变量的时候,没有写这3个任意一个访问修饰符的时候,此时的权限是默认权限。因此选B。
public class Person{
private String name = "Person";
int age=0;
}
public class Child extends Person{
public String grade;
public static void main(String[] args){
Person p = new Child();
System.out.println(p.name);
}
}
以下代码运行输出的是
本题主要考察继承和访问修饰限定符private,子类继承父类之后,会继承父类私有的数据,但是由于private访问修饰符的问题,子类没有办法直接反问该数据。因此选C。
想要访问private修饰的成员变量要提供一个公共方法getname():修改如下:
public class Person {
private String name = "Person";
int age = 0;
// 提供一个公共方法来访问私有字段 name
public String getName() {
return name;
}
}
// Child.java
public class Child extends Person {
public String grade;
public static void main(String[] args) {
Person p = new Child();
// 通过公共方法访问私有字段 name
System.out.println(p.getName());
}
}