总结:
前九讲给自己的收获是明白了
①类和对象的语义和关联
②实例、静态变量或方法的定义和实际用法
③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方法,方法并没有改变存储在变量a和b中的对象引用。
Swap方法的参数x和y被初始化为两个对象引用的“拷贝”,这个方法交换的是这两个拷贝,a和b中的对象引用并没有变化。最终,白费力气,在方法结束时参数变量x和y被丢弃了。这个过程说明:java对对象采用的不是引用调用,而是值传递。