类和对象(作业篇)

简简单单整理一下咱们的小作业,这次的作业比较简单,只有选择题:

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();
    }
}

1722324690298.png
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);
    }
}

当你编译和运行下面的代码时,会出现下面选项中的哪种情况?
1722325608236.png
首先我们清楚的是,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);
    } 
}

如下代码的输出结果是什么?
1722326052352.png
依然是静态变量的问题,在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(). 描述正确的有()
1722326602845.png
还是static静态的问题,这里的hello()是一个静态的成员方法,我们在调用这个方法的时候一般使用类名调用,即Test.hello(),这里对Test进行实例化之后,哪怕表示test这个引用不指向任何对象,也对我们的调用没有影响,因为我们的方法是静态的,不需要通过对象访问。所以A√。

public static void main(String[] args){
  String s;
  System.out.println("s="+s);
}

下面代码的运行结果是()
1722327056187.png
送分题,没有初始化,编译不能通过,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);
	}
}

关于以下程序代码的说明正确的是()
1722327488736.png
本题中的静态成员变量x,属于类变量,只有一份。所有对x的操作针对的都是同一份
静态成员变量的访问需要通过类名访问,这是正确的访问方式。本题中虽然使用了对象引用访问,但是不会报错,我们不建议这样访问,但不是错误,所以,不会编译报错。
所以得出结论:本题可以正常通过编译和运行,输出结果是102,A√。

第七题
下面哪一项不是 java 类访问控制关键字
1722327770200.png
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);
	}
}

以下代码运行输出的是
1722327852555.png
本题主要考察继承和访问修饰限定符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());
    }
}
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值