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.构造方法的调用是在创建一个对象时使用new操作进行的。
3.不能在构造方法中使用return返回一个值。
不能通过编译,声明对象中没有给值(没有传参)。

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;
}


没有实例化String对象。

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;
}

结果:

原因:每个String对象是保存在堆内存之中的,内容分别保存到了不同的内存空间,所以地址的值是不相同的,“==”是判段数值是否相等,所以obj1与obj2的值不相同。
解决办法使用 equals方法对String 的内容进行比较。

4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。

封装对象就是指对外部不可见,对内部数据的保护,以防出现不合法的数据以及操作。

package lianxi;


public class lianxi {
   public static void main(String args[]) {
	   Foo per= new Foo();
	   per.setName("张三");
	   per.setAge(30);
	   per.tell();
   }
}
class Foo{
    private String name;
    private int age;
    public void tell () {
    	System.out.println("姓名:"+getName()+",年龄:"+getAge());
    }
    public String getName() {
    	return name;
    }
    public void setName(String n) {
    	name=n;
    }
    public int getAge() {
    	return age;
    }
    public void setAge(int a) {
    	age=a;
    }
}

对姓名和年龄进行了封装.

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();
    }
}

编译不成功,y声明的是全局属性(静态属性),而x不是,同时调用xy要保持一致,x也要进行static 声明

6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。

package lianxi;
class Book {
int bookId;
String bookName;
double price;
static int i = 1000;
// 定义静态代码块对静态变量初始化

// 构造方法
public Book(String bookName, double price) {
  
    this.bookName = bookName;
    this.price = price;
   i++;   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;
}

// 重写toString方法
public String toString() // 重写toString方法
{
    return "书名:" + this.getBookName()  + "价格:" + this.getPrice()  + "	编号:" + bookId + "
";
}
}

public class lianxi {
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。

一个类只能有一个实例,整个系统都要使用这个实例

package lianxi;

class Sun {
private String Sun;
public void Sun() {
	
}
public void sun(String Sun) {
	this.Sun=Sun;
}
public String getSun() {
	return Sun;
}
public void setSun(String sun) {
	Sun = sun;
}
}

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[]是传地址str传递值

9.其他需要总结的内容。

还要反复练习面向对象这章的内容,很多地方脑子里还是和糨糊一样特别乱,类的定义和使用,对象的创建和使用方面。

(二)实验总结

本次实验包括实验二和实验三两次的内容:

1.用面向对象思想完成评分系统

程序设计思路:一共要设计三个类,评委类、选手类和测试类。在选手类中存储选手姓名、编号以及得分 基本信息,评委类中对各个评委对各个选手打分情况进行排序以及平均分的计算。

最后需要一个测试类,将具体数据输入、得出选手的最后得分信息。

问题:在测试类中输入评委数在传输到评委类时出错误

原因:对类的运用还不是特别的熟练以及清楚原理

解决方案:pingwei per1=new pingwei(b);通过这个代码传送,以及评委类中的其他就不一一例举了

2.Email验证

程序设计思路:用indexOf()判断是否存在"@"与".",然后根据返回值大小判断哪一个在前面,用startsWith()判断能不能以@开头。用endsWith()方法判断能不能以一串字符串结尾。用4个if语句相互嵌套来实现

3.查找子串

程序设计思路:用indexOf()方法找到字符串出现的位置,如果找到查找的字符串则在此位置的下一个位置再次进行查找,一直循环这一步,从而查询到字符串出现的次数

没有太大的问题

4.统计文件

程序设计:用split()函数将字符串隔开存到一个数组里,在将文件名和文件类型分别存到两个数组里面。

问题:将字符串逗号隔开传到数组后,在使用.分开,存到另一个数组,输出不对

三)代码托管(务必链接到你的项目)

码云提交历史截图
上传实验项目代码到码云,在码云项目中选择“统计-提交”,设置搜索时间段,搜索本周提交历史,并截图。

原文地址:https://www.cnblogs.com/lch1/p/8688787.html