Java_实验二

(一)学习总结
1、构造方法用于在创建对象时对其进行初始化Person p=new Person
他的特点:(1)方法名与类名相同(2)方法名前没有返回值类的声明,方法中不能使用return语句返回一个值(3)用户不能直接调用,而是通过关键字new自动调用
方法的重载就是方法名称相同,但参数的类型和参数的个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用。

public class Test {
    public static void main(String args[]) { 
       Foo obj = new Foo();       
    }     
}
class Foo{
    int value;
    public Foo(int intValue){
        value = intValue;
    }
}

不可以,类中没有定义无参的构造方法

2、编译没有错误,在运行时出错

public class Test {
    public static void main(String[] args) {
        MyClass[] arr=new MyClass[3];
        arr[1].setValue(100);
    }
}
class MyClass{
    public int value=1;
    public MyClass(){
    	
    }
    public MyClass(int value){
    	this.value=value;
    }
    public int getValue(){
    	return value;
    }
    public void setValue(int value){
    	this.value=value;
    }
}

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 ==比较的是地址,应该用equals方法
4、

class CashCard {
	String number;
	int balance;
	int bonus;
	public CashCard(String number,int balance,int bonus){
		number = number;
		balance = balance;
		bonus = bonus;
	}
}
public class Test {
	public static void main(String[] args) {
		CashCard card1 = new CashCard("A001",500,0);
		CashCard card2 = new CashCard("A002",300,0);
		CashCard card3 = new CashCard("A003",1000,1);
	}
}

封装把对象的所有组成部分(数据和方法)封装在一起构成类,对象本身的数据的得到保护/隐藏,其他对象通过该对象的访问方法(接口/interface)与之发生联系,好处:模块化,信息隐藏—通常定义一个公共接口/方法实现对对象的访问

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的getter和setter方法
(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开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。


class Book{
    int bookId;
    String bookName;
    double price;
    String str;
    static int num;
    static{
    	num=1000;
    }
    Book(){
		
	}
	Book(String bookName,double price){
		this.bookName=bookName;
		this.price=price;
		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-1000;
	}
	public void tostring(){
		System.out.println("书名:"+bookName+" 书价:"+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){
            book.tostring();
        }
    }   
}

7、
在设计一个类时,需要保证在整个程序运行期间针对该类只存在一个实例对象,构造方法私有化,在类内创建一个实例对象,用私有静态成员instance引用该对象,定义静态方法getInstance()返回实例对象instance

class Sun{
	private static Sun instance = new Sun() ;
	private Sun(){   }
	public static Sun getInstance(){
		return instance ;
	}
}
public class Test{
	public static void main(String args[]){
		Sun s1 = Sun.getInstance() ;
		Sun s2 = Sun.getInstance() ;
		System.out.println(s1==s2);
	}
}

8、

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.用面向对象思想完成评分系统
程序设计思路:
设计一个选手类,一个测试类,一个平分类写出他们的构造方法以及getter和setter方法,构造方法(有参和无参),在评分类中计算平均分,在测试类中进行验证
问题以及解决方案:
(1)、开始没有写无参构造方法,在调用时出错
(2)、注意","和“.”的使用,在编写程序时注意不要打错
(3)、输入的评委人数一定要大于三否则去掉最高和最低没有成绩
(4)、注意循环的使用以及嵌套,不要重复输入没有必要的信息

2.Email验证
程序设计思路:
可以设计4个方法分别测试email的地址是否合法,注意@和。同时存在,可用查询如果没有返回-1,查看是否同时存在,对于@在。之前可以检测他们的下标的大小,对于不能以@开头可以看看下表为0的是否为@,对com或cn或net或gov或edu或org结尾的可以提取字符串的后三个字符进行比较,在主方法中判断他们是否都正确
问题以及解决方案:
(1)、对cn的测试可以用。cn
(2)、注意字符串方法的调用为str.indexOf();
(3)、可以使用Boolean类型的返回值,在主方法中进行验证

3.查找子串
程序设计思路:
定义一个方法找到字符串中有几个子串,返回子串的个数,主方法中输出,在while循环中调用indexof方法,注意从方法返回的下标继续查找
问题以及解决方案:
(1)、注意是从indexof方法返回的下标开始第二次的查询,以后同理
(2)、注意当返回的下标不为一时,子串个数加一

4.统计文件
程序设计思路:
可以编写一个方法查找有多少个文件类型一个数,且进行文件首字母大写输出,先用split方法对字符串进行分离,再用substring进行文件第一个字母分离,大写输出,在定义字符串数组按“.”分离字符串,把字符串数组的最后一个字符串放到一个新的字符串数组中,计算文件类型以及个数
问题以及解决方案:
(1)、在对文件的首字母大写输出是可以用str.substring(0,1).toUpperCase()
(2)、在计数文件的个数时注意数组不要越界
(3)、在进行文件类型的统计要考虑到以a。txt为文件名的情况

5.类的设计
程序设计思路:
设计一个日期类,一个职工类,一个部门类,分别写出他们的getter,setterfangfa以及含参和不含参的构造方法,日期类可以调用str。replaceAll(",","-")方法,在测试类中调用getter和setter方法对职工的生日和参加工作时间进行设置,在测试类中进行信息的设置,实现查询
问题以及解决方案:
(1)、在设置日期类时可以调用replaceAll()方法
(2)、在改变员工的日期类形时,要调用getter和setter方法
(3)、可以对信息进行初始化在查询
(4)、可以设置一个Boolean类型的变量,如果不想继续查询可以终止查询

原文地址:https://www.cnblogs.com/lr97/p/8684495.html