1、学习要点
认真看书并查阅相关资料,掌握如下内容:
理解对象的建立与引用的关系
掌握构造方法的重载
掌握String类
掌握类的设计方法
掌握this关键字
掌握static关键字
理解引用传递并掌握基本应用
掌握单例模式
理解内部类
2、做业要求
发布一篇随笔,主要包括如下几部分的内容:
(一)学习总结
1.什么是构造方法?什么是构造方法的重载?下面的程序是否能够经过编译?为何?
在面向对象程序中构造方法的主要做用是属性初始化, 在对象的生成格式中 “类名称 对象名称 =new 类名称()”中知道,只要“()”出现,就表示调用了方法,这个方法实际上就是表示要调用构造方法,构造方法能够当作一种特殊的方法,它的定义方式与普通方法相似。
在构造方法中需注意如下几点:
1>构造方法的名称必须和类名称一致。
2>构造方法的声明处不能有任何返回值类型声明。
3>不能在构造方法中使用return返回一个值。
当调用关键字new实例化对象时才会调用构造方法。
只要有类就一定存在构造方法,在java中若是一个类中没有明确的声明一个构造方法时,则在编译时会直接生成一个无参数、什么都不作的构造方法。例 形式以下:java
class Person{ public Person(){} } }
在一个类 中若是已经明确的声明了一个构造方法,那么程序必定会在编译时不会再生成默认的构造方法,即一个类中应该至少有一个构造方法。数据库
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].value=100; } } class MyClass{ public int value=1; }
编译报错,只声明了数组,并未实现实例化,应该对数组中的每一个元素经过new构造方法进行实例化。数组
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; }
会出现 flase,由于两个对象都是经过new开辟了新地址,因此最后比较的是地址,两个地址不一样。
4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
1>封装性是面向对象的第一大特性,所谓的封装性就是指对外部不可见。 为了不出现 用对象直接访问类中的属性 这样的错误发生,(这在面向对象中是不容许的),在通常 的开发中每每要将类中的属性封装(private)。
2>属性封装:private 属性类型 属性名称;
方法封装: private 方法返回值 方法名称(参数列表){}
3> 类中所有属性都必须封装,封装后的属性必须经过setter和getter进行访问(也就是经过这两种方法设置和取得)。
4>用private声明的属性或方法只能在其类内部被调用,而不能在类的外部被调用。测试
5.阅读下面程序,分析是否能编译经过?若是不能,说明缘由。this
(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是private私有的,不能直接调用
(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(); } }
method这个方法是static修饰的,只能访问static修饰的字段。
6.使用类的静态变量和构造方法,能够跟踪某个类建立的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。code
class Book{ int bookId; String bookName; double price; // 声明静态变量 public static n; //定义静态代码块对静态变量初始化 static { n=0; } //构造方法 public Book(String bookName,double price ){ this.bookName=bookName; this.price =price ; n++; this.bookId=1000+n; } 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 int totalBook(){ return n; } //重写toString方法 public string toString(){ return "编号"+bookld+“书名”+bookName+"价格"+"price "+"图书总数目为"+n; } } } 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。 单例模式,是一种常见的软件设计模式。在它的核心结构只包括一个被称为单例的特殊类。经过单例模式能够保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。 特色:一个类中只有一个实例。 ... class Sun{ private Sun instance = new Sun(); private Sun(){ } public static 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
- 缘由:str属于引用类型,调用change方法把地址传入,在change方法中改变了str的值后释放地址空间,没有改变主方法中str的值。而ch表明数组的地址,调用change方法改变了ch第一个字符的值后将ch传回主方法。
(二)实验总结
本次实验包括实验二和实验三两次的内容:
1.用面向对象思想完成评分系统
2.Email验证
建立一个布尔类型方法判断email有效的四个条件,四个条件都知足时返回true,有一个条件不知足则返回false。