java第二次作业
一、学习要点
认真看书并查阅相关资料,掌握以下内容:
理解对象的创建与引用的关系
掌握构造方法的重载
掌握String类
掌握类的设计方法
掌握this关键字
掌握static关键字
理解引用传递并掌握基本应用
掌握单例模式
理解内部类
二、作业要求
发布一篇随笔,主要包括以下几部分的内容:
(一)学习总结
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)构造方法的名称是与类名相同的;
(4)构造方法没有返回值,即方法名前没有void,int等数据类型,方法体内没有return语句;
(5)参数格式为:数据类型 数据名称 其定义的变量可以在方法内使用,常用来传递数据。而在本方法体外是没有办法访问的,亦可理解为局部变量。
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;
}
结果是
原因:没有实例化
修改:实例化
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;
}
结果是
原因:存储地址不同
4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
就是封装起来,一个对象一个对象的, 对象与对象之间的通信也是用专门的对象的
Java的封装是通过private修饰符来声明属性和方法实现的。对象的属性与服务结合为一体,成为一个独立的实体,对外屏蔽其内部细节,即封装。对事物进行分类。把具有相同属性和服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个示例。
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++);
}
}
不能,因为insert是私有属性
(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没有定义为static属性
6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。
class Book{
int bookId;
String bookName;
double price;
// 声明静态变量
public static a
//定义静态代码块对静态变量初始化
static{
a=0;
}
//构造方法
public Book(String bookName,double price ){
this.bookName=bookName;
this.price =price ;
a++;
this.bookId=1000+a;
}
public String getBookName() {
return bookName;
}
public double getPrice() {
return price;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void setPrice(double price) {
this.price = price;
}
//定义方法求图书总册数
public int totalBook(){
return a;
}
//重写toString方法
public string toString(){
return "编号"+bookld+“书名”+bookName+"价格"+"price "+"图书总数目为"+a;
}
}
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.单例类的构造器必须是私有,不允许外界通过构造器创建对象.
4.单例类只能通过公开的静态方法向外界返回类的唯一实例
class Sun{
private Sun in = new Sun();
private Sun(){
}
public static Sun getIn(){
return in;
}
}
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';
}
}
输出“你好”后,空间会被释放掉,而ch数组中w会变成W,然后输出
9.其他需要总结的内容。
(二)实验总结
本次实验包括实验二和实验三两次的内容:
1.用面向对象思想完成评分系统
程序设计思路:用三个类,然后在测试类中调用
2.Email验证
程序设计思路:用一个方法进行判断,然后再在主函数中调用,用charAt等函数来判断
问题1:结果不对
原因:布尔类型和int不能相互转化
3.查找子串
程序设计思路:输入字符串和要查找的子串,通过循环来查找子串
4.统计文件
程序设计思路:用str.substring()和toUpperCase()函数
5.类的设计
对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。