(一)学习总结
1.什么是构造方法?什么是构造方法的重载?
构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法的重载就是定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
下面的程序是否可以通过编译?为什么?
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;
}
结果:Exception in thread "main" java.lang.NullPointerExceptionat asd.Test.main(Test.java:6)
原因:声明对象的同时没有对其进行实例化,应该对每个元素进行实例化。
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
原因:创建obj1与创建obj2时都是开辟了一块新的空间,二者地址不同。
4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
封装性就是把对象的成员属性和成员方法结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,封装后的成员在对象的外部不能被访问,但在对象内部的成员方法中可以访问到自己对象内部被封装的成员属性和被封装的成员方法。
举例
package asd;
public class Test {
public static void main(String[] args) {
Fz f=new Fz();
f.setxe(20);
f.tell();
}
}
class Fz{
private int xe;
public int getxe()
{
return xe;
}
public void setxe(int m)
{
xe=m;
}
public void tell()
{
System.out.print(getxe());
}
}
结果:20
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属于A的私有属性,外部不能直接访问。
(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是动态变量。
6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。
7.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类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';
}
}
结果:你好wolld
9.其他需要总结的内容。
(二)实验总结
Email验证:运用各种String方法完成各个条件的检验;
查找子串字数:运用for循环每查找到一个子串,记录下位置并加上子串长度作为下次开始循环的位置,直到循环结束。
文件统计:以“,”为界限将字符串切离并存在字符串数组中,利用分离方法与字符大写方法来完成文件名首字母大写。分离后缀名到一个新的字符串数组中,利用for循环计算各种文件类型出现的次数(已出现的文件类型再计算次数后赋值null,以免下一次循环再一次计入)。
(三)代码托管