第四章作业参考答案

选择题:

  1. A (不确定)
  2. D
  3. AC //this不能用于static方法里,故D错误; 在静态初始化块中不能直接访问非static成员,故A正确。
  4. BC //非静态方法必须采用对象.方法名来调用,不能直接调用 ,故B错误;java类如果存在继承,子类可以访问父类非私有方法,不仅仅是本类方法
  5. C

注意:
6. 静态不能访问非静态
7. this 不能用于静态方法中,this的本质就是“创建好的对象的地址”!
8. 在类方法中调用本类的类方法时可直接调用(x). 要注意非静态方法,不能直接调用静态方法,要通过对象.方法名来调用。见下例:

...
public void login() {
        printCompany();
        System.out.println(company); 
        System.out.println("登录:" + name);
    }
     
    public static void printCompany() {
//         login();//调用非静态成员,编译就会报错       //静态方法不能访问非静态
        System.out.println(company);
    }
     
    public static void main(String[] args) {
        User2 u = new User2(101, "高小七");
        User2.printCompany();   //调用静态方法格式:类名.
        ...

编程题:
1.

/**
 * 第四章练习题
 * 
 * @author 王立生
 *
 * 题目:编写 Java 程序
 * 用于显示人的姓名和年龄。定义一个人类Person。 
 * 该类中应该有两个私有属性: 姓名 (name) 和年龄 (age) 。
 * 定义构造方法用来初始化数据成员。再定义显示(display()) 方法将姓名和年龄打印出来。
 * 在 main 方法中创建人类的实例然后将信息显示。
 */
public class Person {
	String name;
	int age;
	
	public  Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	public static  void display(Person p){
		System.out.println("姓名:"+p.name);
		System.out.println("年龄:"+p.age);
		
	}
	
	public static void main(String[] args){
		Person p=new Person("镜小月",23);
		
		Person.display(p);
	}
}

方法1:

package Exercise;
/**
 * 第四章作业题
 * 
 * @author 王立生
 *
 * 题目:定义一个圆类——Circle,
 * 在类的内部提供一个属性:半径(r),
 * 同时 提供 两个 方 法 : 计算 面积 ( getArea() ) 和 计算 周长(getPerimeter()) 。
 * 通过两个方法计算圆的周长和面积并且对计算结果进行输出。
 * 最后定义一个测试类对 Circle 类进行使用。
 * 
 */
public class Circle {
	static double r;
	
	public Circle(double r){
		this.r=r;
	}
	
	public static void getArea(Circle cc){
		double s=Math.PI *r*r;    //此处调用r,静态不能调用非静态,故也应把上述r的定义加上static限制
		System.out.println("面积为:"+s);
	}
	
	public static void getPerimeter(Circle cc){
		double l=2*Math.PI * r;
		System.out.println("周长为"+l);
	}
	
	public static void main(String[] args){
		Circle cc=new Circle(1.23);
		
		Circle.getArea(cc);
		Circle.getPerimeter(cc);
	}
}

方法2:

package Exercise;
 /**
  * 第四章练习题
  * 
  * @author 王立生
  * 
  * 编程题第二题方法二
  * 
  * 题目:定义一个圆类——Circle,
  * 在类的内部提供一个属性:半径(r),
  * 同时 提供 两个 方 法 : 计算 面积 ( getArea() ) 和 计算 周长(getPerimeter()) 。
  * 通过两个方法计算圆的周长和面积并且对计算结果进行输出。
  * 最后定义一个测试类对 Circle 类进行使用。
  */
public class Circle2 {
	double r;
	
	//构造方法
	Circle2(double r){
		this.r = r;
	}
	
	public void getArea(){
		System.out.println("面积:"+Math.PI*r*r);
	}
	
	public void getPerimeter(){
		System.out.println("周长"+2*Math.PI * r);
	}
	
	public static void main(String[] args){
		Circle2 cc=new Circle2(1.23);
		
		cc.getArea();
		cc.getPerimeter();
	}
}

方法1与方法二的区别:

  1. 方法1 定义方法getArea和方法getPerimeter用了static 限制,说明这两个方法都是静态方法。静态方法的意思是,他们属于整个大超市(类)内,而不是属于某个小推车(对象),可以理解为超市将它们的位置信息给了小推车(此时小推车装的是地址(即:对象是地址))(即静态方法属于类,类把方法的地址给了对象)。因此后面在调用它们的时候,需要用超市名(类名).方法(对象)来调用,而不能用小推车名(对象名)来调用,并且要指定小推车即代码中的:
        ...
        Circle.getArea(cc);
		Circle.getPerimeter(cc);
		...
  1. 方法2 没用静态定义方法getArea和getPerimeter,因此创建对象后,超市的所有东西都属于小推车(类里面所有内容均属于对象的了),故调用方法时,需要用小推车名来调用。即代码中的:
        ...
        cc.getArea();
		cc.getPerimeter();
		...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值