《Java技术》第二次作业--面向对象基础
一)学习总结
1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
public class Test {
public static void main(String args[]) {
Foo obj = new Foo();
}
}
class Foo{
int value;
public Foo(int intValue){
value = intValue;
}
}
构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。
1.必须在同一个类2.方法名相同3.方法参数个数或参数类型(或参数顺序)不同
否,构造函数 Foo()未定义。
2.运行下列程序,结果是什么?分析原因,应如何修改。
public class Test {
public static void main(String[] args) {
MyClass[] arr=new MyClass[3];
arr[1].value=100;
}
}
class MyClass{
public int value=1;
}
编译错误,未对对象进行实例化。通过new对arr[1]实例化。
3.运行下列程序,结果是什么?说明原因。
public class Test {
public static void main(String[] args) {
Foo obj1 = new Foo();
Foo obj2 = new Foo();
System.out.println(obj1 == obj2);
}
}
class Foo{
int value = 100;
}
false,实例化分配空间地址不一样。
4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
封装就是指对外部不可见,外部只能通过对象提供的接口来访问。
public class Test
{
public static void main(String args[]){
Clerk clerk1=new Clerk("qingfeng",22,5321.12f);
System.out.println("名字为"+clerk1.name+"薪资为"+clerk1.getSalary()); //只能通过授权的操作(成员方法)进行访问
}
}
class Clerk
{
public String name ;
private int age;
private float salary;
public Clerk(String name, int age, float sal){ //构造方法
this.name = name;
this.age = age;
this.salary = sal;
}
public float getSalary(){ //成员方法
return this.salary;
}
}
5.阅读下面程序,分析是否能编译通过?如果不能,说明原因。
(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是私有属性,不能通过对象直接访问。
(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 进行静态引用。
6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。
class Book{
int bookId;
String bookName;
double price;
// 声明静态变量
static int num=1000;
//定义静态代码块对静态变量初始化
//构造方法
Book (String bookName,double price){
this.bookName=bookName;
this.price=price;
bookId=num++;
}
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 num;
}
//重写toString方法
public String toString(){
return "编号:"+this.bookId+"书名:"+this.bookName+"书价:"+this.price;
}
}
public class Test{
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());
}
}
}
7.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
1.私有构造方法 2.私有静态引用指向自己实例 3.以自己实例为返回值的公有静态方法
public class Sun {
private Sun() {};
public static Sun instance = new Test();
public Sun getInstance() {
return instance;
}
}
8.理解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';
}
}
你好 Wolld。值传递不会改变原有属性的值。
(二)实验总结
1.用面向对象思想完成评分系统
程序设计思路:创建选手类,评分类,测试类,在测试类中创建选手对象,评分类为每位选手打分。
问题:直接用冒泡排序,没用Arrays方法
原因:不会用,没理解
解决方案:同学讲解
2.Email验证
程序设计思路:编写一个方法,判断一个email地址是否有效。在main方法中对该方法进行测试。
问题:没用条件嵌套优化程序
原因:没想到
解决方案:同学指出
3.查找子串
程序设计思路:编写一个方法,查找在一个字符串中指定子串出现的次数。在main方法中输入字符串和查找的子串,对该方法进行测试。
问题:将字符串换成字符数组,进行比较
解决方案:利用substring方法截取字符串进行比较
4.统计文件
程序设计思路:
问题:将文件类型首字母大写,未将文件名首字母大写
原因:为弄清题意
解决方案:仔细读题
5.类的设计
问题:搞不清关系
三)代码托管(务必链接到你的项目)
码云提交历史截图
上传实验项目代码到码云,在码云项目中选择“统计-提交”,设置搜索时间段,搜索本周提交历史,并截图。
https://gitee.com/hebau_java_cs16/Java_CS02CQ/tree/master/ex02/src