Java第三次作业——面向对象基础
(一)学习总结
1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
封装性是面向对象的第一大性,所谓的封装性起保护作用是对外部不可见的;
只要是被封装的属性必须通过setter和getter方法设置和取得
属性封装;private 属性类型 属性名称;
方法封装;private 方法方法返回值 方法名称(参数列表){}
private String name;
private int age;
public void tell(){
System.out.printin("姓名:"+getName()"年龄:"+getAge());
}
public String getName(){
return name;
}
public void setName(int n){
name=n;
}
public int getAge(){
return age;
}
public void setAge(String a){
age=a;
}
public class zuoye{
public static void main(String args[]){
Person per=new Person();
per.name="小明";
per.age=21
per.tell();
}
2.阅读下面程序,分析是否能编译通过?如果不能,说明原因。
(1).
class A{
private int secret = 5;
}
public class Test{
public static void main(String args[]){
A a = new A();
System.out.println(a.secret++);
}
}
不可执行 如图:
secret是封装性不可直接使用
需要给secfret创建setter和getter.
(2).
public class Test{
int x = 50;
static int y = 200;
public static void method(){
System.out.println(x+y);
}
public static void main(String args[]){
Test.method();
}
}
不可执行 如图:
x是非静态常量,内存内没有存入x的值
加static关键字 使"static int x = 50;"
3.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出了测试类代码和Book类的部分代码,将代码补充完整。
public class Book {
int bookId;
String bookName;
double price;
static int i=1000; // 声明静态 变量
//定义静态代码块对静态变量初始化
public Book(String bookName,double price) {
i++;
this.bookName=bookName;
this.price=price;
bookId=i;
} //构造方法
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public static int totalBook() //定义方法求图书总册数
{
return i-1000;
}
public String toString() //重写toString方法
{
return
"\t 书名:" + this.getBookName() + "\n" +
"\t 价格:" + this.getPrice() + "\n" +
"\t 编号:" + bookId+ "\n";
}
}
public class zuoye{
public static void main(String args[]){
Book[] books = {
new Book("c语言程序设计",29.3),
new Book("数据库原理",30),
new Book("Java学习笔记",68)};
System.out.println("图书总数为:"+ Book.totalBook());
for(Book book:books){
System.out.println(book.toString());
}
}
}
4.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。
单个类在使用过程中只有一个实例;
单例类是有自己创建这个实例;
同时为所有对象提供这一实例。
class Sun{
private static Sun instance = new Sun() ;
private Sun(){
}
public static Sun getInstance(){
return instance ;
}
public void printf(){
System.out.println("Hello World!");
}
public class zuoye{
public static void main(String arg[]){
Sun s1=Sun getInstance();
Sun s2=Sun getInstance();
s1.print()
s2.print()
}
};
5.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。
public class Test {
String str = new String("你好 ");
char[] ch = { 'w','o','l','l','d' };
public static void main(String args[]) {
Test test = new Test();
test.change(test.str, test.ch);
System.out.print(test.str);
System.out.print(test.ch);
}
public void change(String str, char ch[]) {
str = "hello";
ch[0] = 'W';
}
}
运行结果为:
Java中String型变量传参只传了变量中的内容;
传递到change方法中不能改变空间存放内容。
6.自我总结
每次写作业都觉得好难,但是总是能从中收获点什么,对于新学的东西比如说这次面对对象的封装性理解了不少,但是一加上以前学的内容就很愁。
我争取把新学的一点一点啊积累学会,对于以前不懂得也慢慢赶上去。
(二)实验总结
1.类的设计
程序设计思路 利用封装性setter和getter 依次写出日期类、职工类和部门类
再利用方法写出测试类 在以上三个类中赋值。
问题 不理解lenght的使用总是出错;
会定义结构 但不会根据结构取出数据。
解决方法 测试类中不用lenght 直接一个个定义 一个个赋值
2.计算工具类设计
程序设计思路 利用封装性setter和getter 提供球 圆柱的计算方法 同时定义球和圆柱的体积之和及表面积之和
再编写测试类直接显示出结果
(三)代码托管
链接:https://git.oschina.net/hebau_cs15/Java-CS02lcx.git
(四)学习进度条
代码行数 | 学习时间 | 本周学习内容 | |
---|---|---|---|
第2-4周 | 150 /200 | 20 | 学习了... |
第5周 | 200/300 | 25 | 学习了数组的使用构造函数 String类等 |
第6周 | 300/500 | 30 | 学习了面向对象的封装性中的许多内容 如secret类 getter和setter类等 |