第二次作业
(一)学习总结
1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
1).构造方法的名称必须与类名一致
2).构造方法的声明处不能有任何返回值类型的声明
3).不能再构造方法中使用return返回一个值
4). 有n个参数或者参数类型不同为重载
以上程序不可以编译
因为公共类未调用参数,Foo类里无引用。
...
public class Bank {
public static void main(String args[]) {
Foo obj = new Foo(20);
}
}
class Foo{
int value;
public Foo(int intValue){
value = intValue;
}
}
...
这样就可以了,不过没有输出看不大出来而已
2.运行下列程序,结果是什么?分析原因,应如何修改。
结果显示不出来,应该对对象实例化
2.运行下列程序,结果是什么?分析原因,应如何修改。
public class Bank {
public static void main(String[] args) {
MyClass[] arr=new MyClass[3];
arr[1]=new MyClass(100);
System.out.println(arr[1].value);
}
}
class MyClass{
public int value=1;
public MyClass(int value){
this.value=value;
}
public int MyClass(){
return value;
}
}
3.运行下列程序,结果是什么?说明原因。
结果是false,因为两者地址不同
public class Bank {
public static void main(String[] args) {
Foo obj1 = new Foo();
Foo obj2 = new Foo();
obj1=obj2;
System.out.println(obj1 == obj2);
}
}
class Foo{
int value = 100;
}
4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
不能由对象直接访问的变量,需要通过方法获得
class Person{
private int age;
public Person(){
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
}
public class Bank{
public static void main(String[] args){
Person per=new Person();
per.setAge(21);
//per.getAge();
System.out.println(per.getAge());
}
}
5.阅读下面程序,分析是否能编译通过?如果不能,说明原因。
(1)
不能,方法类型的后面不可以累加
class A{
private int secret = 5;
public int getSecret(){
secret++;
return secret;
}
public void setSecret(int secret){
this.secret=secret;
}
}
public class Bank{
public static void main(String args[]){
A a = new A();
System.out.println(a.getSecret());
}
}
修改如上.
(2).
x和y类型不同,x不是静态变量,修改如下
package 一本的作业;
public class Bank{
static int x = 50;
static int y = 200;
public static void method(){
System.out.println(x+y);
}
public static void main(String args[]){
Bank.method();
}
}
6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。
package 一本的作业;
class Book{
int bookId;
String bookName;
double price;
// 声明静态变量
static int number=1000;
//定义静态代码块对静态变量初始化
//构造方法
public Book(){
}
public Book(String bookName,double price){
this.bookName=bookName;
this.price=price;
bookId=number;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getBookId(){
return bookId;
}
public void setBookId(int bookId){
this.bookId=bookId;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
//定义方法求图书总册数
public static int totalBook(){
return number++;
}
//重写toString方法
public String toString(){
return "书号\t"+this.getBookId()+"书名\t"+this.getBookName()+"书的价格"+this.getPrice();
}
}
public class Bank{
public static void main(String args[]){
Book[] books = {new Book("c语言程序设计",29.3),
new Book("数据库原理",30),
new Book("Java学习笔记",68)};
int j=0;
for(int i=0;i<books.length;i++){
j++;
}
System.out.println("图书总数为:"+(Book.totalBook()+j));
for(Book book:books){
System.out.println(book.toString());
}
}
}
7.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
public class Sun{
private Sun() {}
private static Sun single=null;
//静态工厂方法
public static Sun getInstance() {
if (single == null) {
single = new Sun();
}
return single;
}
}
8.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。
运行结果为:你好 Wolld
因为类里的值没有被引用;
(二)实验总结
本次实验包括实验二和实验三两次的内容:
1.用面向对象思想完成评分系统
程序设计思路:设计选手类,评委类,测试类
一次在各类中输入,最后在测试类引用输出最大值最小值等
问题一:不会输出得出的结果
原因:toString里没有引用类里的对象
解决方法:照书写的,引用get方法
2.Email验证
程序设计思路:检验是否已标准结尾,判断@与.的位置,主要用indexOf方法
3.查找子串
4.统计文件
以,为分界线挑出文件名再挑出每个字符串的第一位使其变大写字母,以后缀为引计算文件数
234题均为遇到问题
5.类的设计
对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。
类的设计没有太大的问题,get,set等使程序一目了然
https://gitee.com/undersnow/java-hebau