JAVA程序设计--对象和类(十)

总结:

前九讲给自己的收获是明白了

①类和对象的语义和关联

②实例、静态变量或方法的定义和实际用法

③get,set方法的源来和用法

④传参中,基本类型和引用类型的区别

⑤this的用法等

⑥对象数组的使用


练习:


扫描二维码关注公众号,回复: 1075667 查看本文章

此图三个错误

① public class Test

②new C (5)

③c.getValue()

练习:

/*习题1:定义矩形类
(1)首先定义一个矩形类(Rectangle),类包括width,height两种属性。建立一个无参数构造方法建立缺省的矩形,
一个有参数构造方法(传入width和height参数),编写与两个属性相关的get和set方法,和getArea和getPerimeter方法分别求面积和周长。
(2)然后在Rectangle类中增加静态的count属性,以及静态的getCount方法,用来显示矩形对象的个数。
(3)最后编写main方法建立矩形类对象,调用对象的方法计算面积和周长,并显示出来。并在生成第一和第二个矩形对象后,增加输出语句输出当前矩形对象的个数。
*/

/*命名规范:
1. 选择有含义的名字
2. 按照命名规范定义类名,属性,方法,常量等。
– 变量和方法
• 采用小写字母,如果由多个单词构成,则后面每个单词的第一个字母大写。例如,radius, computeArea.
– 类
• 第一个字母大写,如果由多个单词构成,则后面每个单词的第一个字母大写。例如,ComputeArea.
– 常量
• 所有字母大写。例如, PI and MAX_VALUE
– 包
• 所有字母小写。例如,java.lang
*/

Rectangle.java

package test;

public class Rectangle {
private double width;
private double height;
static int count=0;

public Rectangle() {	
this(1.0,1.0);
}

public Rectangle(double width,double height) {
	this.width=width;
	this.height=height;
	count++;
}

public double getArea() {
	return width*height;
}

public double getPerimeter() {
	return (width+height)*2;
	
	
}
static int getCount() {
	return count;
	
}
}

testMain.java

package test;
import test.Rectangle;
public class testMain {
public static void main(String[] args) {
	Rectangle r1= new Rectangle(10.0,10.0);
	System.out.print(r1.getArea()+"\t\t"+r1.getPerimeter()+"\n");
	Rectangle r2= new Rectangle(20.0,20.0);
	System.out.print(r2.getCount());
	
	
}
}

练习:

//能否从静态方法中调用实例方法或者引用一个实例变量?能否从实例方法中调用静态方法或者引用一个静态变量?
/*静态方法不能直接调用实例方法和变量,但可以间接调用(即在静态方法中创建类的实例,然后调用);
可以,不过要看访问权限,若在一个类中调用另一个类的私有的静态方法或变量是不行的。*/

练习:

下面的代码错误在哪里?


1.main函数方法里通过创建类的对象E1来调用method1()函数方法,

Ex8_12E1=new Ex8_12();

E1.method()1; 

2.Circle c=new Circle();放入method2()中;

注意:这个类是什么类,method2方法要访问的什么类。


练习:下列代码错误在:

package test;

public class Circle {
	private double radius =1.0;
	public double getArea(){
		return radius * radius * Math.PI;
	}
	public static void main(String [] args){
		Circle myCircle = new Circle();
		System.out.println("Radius is " + myCircle.radius);
	}
}

答:虽然可以正常输出Radius is 1.0。应使用get方法来进行返回数据域的值,控制私有属性的值不被更改。封装对象的私有属性,达到数据与行为分离。


练习:写出输出结果

package test;

public class Test {
	public static void main(String [] arg){
		Circle circle1 = new Circle(1);
		Circle circle2 = new Circle(2);
		
		swap1(circle1,circle2);
		System.out.println("After swap1: circle1=" + circle1.radius +" circle1=" + circle2.radius );
		
		swap2(circle1,circle2);
		System.out.println("After swap1: circle2=" + circle1.radius +" circle1=" + circle2.radius );
			
	}
	public static void swap1(Circle x, Circle y){
		Circle temp = x;
		x = y;
		y = temp;
	}
	
	public static void swap2(Circle x, Circle y){
		double temp = x.radius;
		x.radius = y.radius;
		y.radius = temp;		
	}
}
class Circle{
	double radius;
	
	Circle (double newRadius){
		radius = newRadius;
	}
	
}


结果:

After swap1: circle1=1.0 circle1=2.0
After swap1: circle2=2.0 circle1=1.0


重点在第一个swap1方法,方法并没有改变存储在变量ab中的对象引用。

Swap方法的参数xy被初始化为两个对象引用的拷贝”,这个方法交换的是这两个拷贝,ab中的对象引用并没有变化。最终,白费力气,在方法结束时参数变量xy被丢弃了。这个过程说明:java对对象采用的不是引用调用,而是值传递。

猜你喜欢

转载自blog.csdn.net/qq_35827280/article/details/80328868