(一)学习总结

1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?

(1) 构造方法用于在创建对象时对其进行初始化,且方法名与类名相同,方法名前面没有返回值类型的声明,不能使用return语句,用户不能直接调用,而是通过关键字new自动调用方法的实现中,也可以进行方法重载

(2) 构造方法的重载,就是每个构造方法的参数类型和参数的个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用

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

(3)不能运行,因为Foo()没有被定义,应该在有参数构造方法中传递参数 例如: Foo obj = new Foo(0);

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

改后的代码如下

public class Test {
public static void main(String[] args) {
MyClass arr=new MyClass();
arr.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;
}

运行结果:false

对于非字符串变量来说,""是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。 若在输出前加上:obj1=obj2; 那么 obj1obj2 是true

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

封装是指隐藏对象的属性和实现细节,仅对外提供公共访问(public),private用于修饰成员变量和成员方法,被修饰的内容在其他类中不可以访问,封装之后属性必须通过setter和getter进行访问

package g;
class Person {
private String name;
private int no; public void tell() {
System.out.println("姓名:" + name + ",学号:" + no);
} public String getName() {
return name;
} public void setName(String na) {
name = na;
} public int getNo() {
return no;
} public void setNo(int n) {
no = n;
}
}
public class App {
public static void main(String[] args) {
Person p = new Person();
p.setName("张三");
p.setNo(8900556);
p.tell(); //姓名:张三,学号:8900556
}
}

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私有的,用private声明的属性或方法只能在其类的内部被调用,而不能在类的外部被调用。将secret改为公有类(public)或者用setter和getter方法进行访问

代码改编:

class A{
public int secret = 5; }
public class App{
public static void main(String args[]){
A a = new A();
System.out.println(a.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();
}
}

用static修饰的成员方法可以通过类名直接调用,而x是非静态变量,y是静态变量,需要将x改为静态变量

  public class Test{
static int x = 50;
static int y = 200;
public static void method(){
System.out.println(x+y);
}
public static void main(String args[]){
Test.method();
}
}

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

class Book{
int bookId;
String bookName;
double price;
// 声明静态变量 //定义静态代码块对静态变量初始化 //构造方法 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;
}
//定义方法求图书总册数 //重写toString方法 }
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());
}
}
}

改编之后

class Book {
int bookId;
String bookName;
double price;
static int count;// 声明静态变量
static { // 定义静态代码块对静态变量初始化
count = 1000;
}
public Book(String bookName, double price) {// 构造方法
this.bookName = bookName;
this.price = price;
bookId = count;
count++;// TODO Auto-generated constructor stub
}
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() { // 定义方法求图书总册数
// TODO Auto-generated method stub
count = count - 1000;
return count;
}
public String toString() {
return "图书编号" + bookId + "书名" + this.bookName + "价格" + this.price;// 重写toString方法
}
}
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。

单例设计模型是指在设计一个类时,需要保证在整个程序只存在一个实例对象

特点:构造方法私有化(private修饰),只能有一个实例;在类内创建实例化对象,用私有静态成员instance引用该对象;定义静态方法getInstance()返回实例对象instance

public class Sun {
private static final Sun sun = new Sun(); // 将自身的实例对象设置成一个static final属性
private Sun() { }// 私有构造方法
public static Sun getInstance() { // 公共静态方法返回该类的实例 通过getInstance()方法访问
return sun;
}
}

8.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。

public class Test {
String str = new String("你好 ");
char[] ch = { 'w','o','r','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';
}
}

结果为:“你好 World” ,因为str的地址发生了改变,但test.str的地址没有发生改变,所以str只是改变了一个副本,而ch[]改变的是地址内容,所以结果为“你好 World”

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

     (1)String中对于“==”与“equals”的区别,“==”比较的是两个对象的地址,“equals”比较的是两个对象的内容
(2)对象数组的格式:类名称 对象数组名称[]=new 类名称[数组长度]
(3)构造方法特点:方法名与类名相同;方法名前没有返回值,不能用return语句返回值;用户需要使用new进行调用;在构造方法的实现中,可以进行方法重载
(4)构造方法的重载:方法名称相同,但参数的类型和参数的个数不同

(二)实验总结

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

程序设计思路:

(1)创建一个选手类,基本属性:编号,姓名,最终得分,定义构造方法、getter和setter方法、toSting方法,实现Comparable接口,完成对象比较方法。

(2)创建一个评分类,基本属性:评委人数,评委给出的分数。定义构造方法、 getter和setter方法、分数输入方法inputScore(),计算平均分avarage(double score[])

(3) 创建一个测试类,在测试类中创建选手对象,为每位选手打分(评分类),所有选手评分完毕后,给出排行榜,包括如下信息(选手编号,选手姓名,选手得分)

2.Email验证

程序设计思路

(1)先使用indexOf,查找@和“.”是否存在且@是否在“‘.”之前

(2)用startswith和endswith来判断位置是否正确

(3)使用if嵌套

问题:

在最开始没有满足全部要求

原因:

没有正确运用“&”和“||”

解决方案:

一遍一遍的进行尝试

3.查找子串

程序设计思路:

(1)先输入一个字符串和需要查找的子串

(2)用indexOf来确定是否存在那个子串,若存在,次数加一,否则返回-1,表示没有查找这个子串

问题:

调用的时候,出现了差错

解决方案:

求助同学,查阅相关资料

4.统计文件

程序设计思路:

(1)首先输入文件名用“,”隔开,用到了“split”;

(2)将首字母变大写用到了数组的第一个位置,运用ASCLL代码,对首字母进行转化

 if (ch[0] >= 'a' && ch[0] <= 'z') {
ch[0] = (char) (ch[0] - 32);
s[x] = new String(ch);
System.out.println("将首字母小写变成大写"+s[x]);
}

(3)再用一下“split”将“.”分隔开,并用数组形式c[x] = t[t.length - 1],将各类型文件存放在c[x]中

(4)最后统计各类文件统计一下出现了多少次

问题:

最开始不知道如何用数组进行分配空间,怎样将各类文件存放在另一个数组中

原因:

对数组定义不够了解

解决方案

先寻问同学,没有解决,然后找了老师

5.类的设计

程序设计思路:

(1)先写出日期类,将年月日设置成int型

(2)设计一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加工作时间,设计toString方法。

(3)设计一个部门类,包括下列属性:部门编号,部门名称,经理,设计相应方法

(4)测试类,采用对象数组模拟一个拥有两个部门,10个职工的单位,实现对相关信息的查询功能

问题:

不知道如何输出两个部门

解决方案:

询问同学,然后用for循环将所需要,其中的具体情况的所对应部门的信息输出即可

(三)代码托管(务必链接到你的项目)https://gitee.com/hebau_java_cs16/java_CS02DRK

《Java技术》的第二次作业的更多相关文章

  1. 《Java技术》 第二次作业

    java第二次作业 (一)学习总结 1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法.举例说明equals方法和==的区别. 在Eclips ...

  2. 《Java技术》第二次作业--面向对象基础

    (一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? public class Test { public static void main(String a ...

  3. 《java技术》第二次作业

    (一)学习总结 1.什么是构造方法?什么是构造方法的重载? 1)没有返回值,名字与类名相同,当新对象被创建的时候,构造函数会被调用,要想构造函数,必须声明对象并对其初始化.每一个类都有构造函数,如果没 ...

  4. 2017-2018-1 Java小组-1623 第二周作业

    2017-2018-1 Java小组-1623 第二周作业 关于游戏软件的问题 讨论结果 20162301张师瑜 20162305李昱兴 20162306陈是奇 20162308马平川 2016231 ...

  5. Java程序设计的第二次作业

    本次作业包含两个部分:一是以下4个题目的程序源码和运行结果截图:二是本次作业的小结(谈谈你在做作业的过程中遇到了哪些问题,如何解决,有哪些收获). 1.编写“人”类及其测试类.1.1 “人”类: 类 ...

  6. 2017《Java学习》第二次作业 计科1502任秀兴

    学习git总结 安装git 1. 安装完成后执行命令git --version查看版本 2.执行命令git config --global user.nam "你的用户名",执行命 ...

  7. JAVA实训第二次作业

    一维数组的创建和遍历. 声明并创建存放4个人考试成绩的一维数组,并使用for循环遍历数组并打印分数.要求: (1) 首先按"顺序"遍历,即打印顺序为:从第一个人到第四个人: (2) ...

  8. 2017《java技术预备作业》

    2017<java技术预备作业> 1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 亦师亦友,很多人这样说,确实,倘若师生之间如果中间有些隔阂最终吃亏的始终是学生.我认为师生之间应 ...

  9. JAVA第二次作业展示与学习心得

    JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...

  10. Java第二周作业

    Java第二周作业 本周作业: 参考http://www.cnblogs.com/rocedu/p/7911138.html 学习第二三章视频 参考http://www.cnblogs.com/roc ...

随机推荐

  1. Comet之SSE(Server - Sent - Envent,服务器发送事件)

    1.SSE API 先要创建一个新的EventSource对象,并传进一个入口点: var source = new EventSource("myenvent.php"); △: ...

  2. php代码一样,编码不同报错

    php代码一样,编码不同报错 两个php代码完全一样,但是就报错,比如说声明比如在very first,这种,可以把编码设置utf-8 无bom

  3. linux查看文件内容的常见命令

    1.cat命令,显示文件的所有内容,内容过多则显示最后一屏一般用于内容较少文件 2.more命令,分页显示文件的内容一般用于文件内容过多的文件,回车显示下一行,空格显示下一页,q/Q退出 3.head ...

  4. c# 几种深拷贝方式的比较

    public static class Tools { //利用 BinaryFormatter 实现深拷贝 public static T DeepCopyByBinary<T>(thi ...

  5. 2-51单片机WIFI学习(开发板测试远程通信详细介绍)

    前一篇链接(最后有APP安装包下载地址) http://www.cnblogs.com/yangfengwu/p/8720148.html 由于自己别的贴片的板子还没到,所以用自己的8266最小系统板 ...

  6. Django admin 中抛出 'WSGIRequest' object has no attribute 'user'的错误

    这是Django版本的问题,1.9之前,中间件的key为MIDDLEWARE_CLASSES, 1.9之后,为MIDDLEWARE.所以在开发环境和其他环境的版本不一致时,要特别小心,会有坑. 将se ...

  7. RxJava系列5(组合操作符)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  8. (Sqlyog或Navicat不友好处)SHOW ENGINE INNODB STATUS 结果为空或结果为=====================================

    因为最近在学习innodb引擎,所以就在自己的sqlyog上执行上述命令: SHOW ENGINE INNODB STATUS 结果显示如下: 换了个客户端navicat,执行如下: 最后登录到服务器 ...

  9. Java练习(模拟扫雷游戏)

    要为扫雷游戏布置地雷,扫雷游戏的扫雷面板可以用二维int数组表示.如某位置为地雷,则该位置用数字-1表示, 如该位置不是地雷,则暂时用数字0表示. 编写程序完成在该二维数组中随机布雷的操作,程序读入3 ...

  10. String、StringBuffer、StringBulider之间的联系和区别

    首先,我们大概总体的解释一下这三者的区别和联系 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. StringBuf ...