(一)学习总结

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. 延迟确认和Nagle算法

    前篇文章介绍了三次握手和四次挥手,了解了TCP是如何建立和断开连接的,文末还提到了抓包挥手时的一个“异常”现象,当时无法解释,特地查了资料,知道了数据传输中的延迟确认策略. 何谓延迟确认策略? WIK ...

  2. MSSQL---extents

    一.MSSQLextent分两种: 1. Mixed extent:每个表或索引创建时,MSSQL并不给它分配一个extent,而是在mixed extnet内分配一个页,空间需求扩大时,再分配一个… ...

  3. GIT入门笔记(5)- 创建版本库

    版本库又名仓库,英文名repository,可以简单理解成一个目录, 这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻 ...

  4. OAuth2.0学习(1-12)开源的OAuth2.0项目和比较

    OAuth2.0学习(2-1)OAuth的开源项目   1.开源项目列表 http://www.oschina.net/project/tag/307/oauth?lang=19&sort=t ...

  5. bootstrap 一个简单的登陆页面

    效果如图:用bootstrap 写的一个简单的登陆 一.修改样式 样式可以自己调整,例如换个背景色之类的,修改 background-color属性就可以 #from { background-col ...

  6. 启动mongodb遇到的错:warning: 32-bit servers don't have journaling enabled by deflity

    执行修复:mongod --repair即可 正常关闭:killall mongod

  7. jenkins配置findbugs失败---不要随便忽略警告!一个因为文件所有权引发的血案

    一:背景交代 这两天组长让我这边搭一个持续集成环境.梳理了需求后,因为我们的项目都是maven项目,所以我选择了jenkins+外置maven(区别于直接从jenkins里面安装)的方案.(cento ...

  8. python三元操作符

    #比较大小更简单了 x,y=3987,24361 small=(x if x<y else y) print(small)   #方法一:比较三个数的大小找出较大的一个 x,y,z=8,1,13 ...

  9. Map 接口简明

    Map 接口并没有继承Collection接口 HashMap : 哈希表数据结构,是线程不同步的,快速.允许存储 null 键,null 值.替代了 Hashtable. LinkedHashMap ...

  10. 一览Django框架(转载)

    本文面向:有python基础,刚接触web框架的初学者. 环境:windows7   python3.5.1  pycharm专业版  Django 1.10版 pip3 一.Django简介 百度百 ...