(一)学习总结

1.什么是构造方法?什么是构造方法的重载?

构造方法是用于对对象初始化的方法,当新对象被创建的时候,构造函数会被调用。

每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。

构造函数的重载是函数名与类名相同,参数类型不同,参数不同。

1.构造方法的名称必须与类名一致

2.构造方法的声明处不能有任何返回值类型的声明

3.不能在构造方法中使用return

4.当自己声明构造方法后,系统不再创建默认的无参构造方法

下面的程序是否可以通过编译?为什么?

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

false,因为比较的是两个对象的引用地址,两个对象都是通过new开辟的不同的新的空间。

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

  1. 类中并不是所有的信息都能让用户可见的,因此隐藏这些信息就很有必要。这就是面向对象对封装的要求。
  2. 封装性的目的:保护当前类的某些属性和方法不被外部所见。
  3. 封装性的实现:Java的封装是通过private修饰符来声明属性和方法实现的。

    作用域 当前类 同一包 子类 其他包

    public √ √ √ √

    protected √ √ √

    default √ √

    private √
  4. 实现该属性的get/set方法,为外部所访问。
  5. 封装后的属性不能像以前一样通过“对象.属性”访问该属性了。通过对象调用对应的get/set方法。

    例如:
public class Time {
private int year,month,day; //字段用private隐藏起来
public Time(){ }
public Time(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
public int getYear() { //通过get,set方法读取隐藏数据
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public String toString( ){
return year+"-"+month+"-"+day;
}
}

5.阅读下面程序,分析是否能编译通过?如果不能,说明原因。

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私有的,不能直接访问操作。

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

mothod方法是static修饰的,只能访问static修饰的字段,x不是。

6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,

书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,

则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。

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

static的两个常用操作,统计该类的对象总数,实现自动编码。

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一开始将自己的引用复制给了局部str,但是局部str又引用了hello,当函数结束调用后,局部str释放,没有涉及远str的改动;

字符数组和c原理相同,通过传入地址,直接在地址上进行修改;

(二)实验总结

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

在裁判类中声明一个选手类,在测试类中通过构造方法引用到选手对象,在裁判对象里实现对选手对象的操作。

2.Email验证

没什么要注意的,定义一个方法,当条件都合法的时候,返回true,否则返回false,如果还想知道哪个条件不合法,可以在判断结构里直接输出提示,也可以返回

特定数值,然后在主方法里,通过返回值判断哪个条件不合法。

3.查找子串

我的思路没有改变原字符串,而是在原字符串里一段一段枚举去找合法的子串,枚举的长度是要找子串的长度,从第一个字母开始找,如果这段是,则从这段后的字符开始再找(i+length),如果不是,从下一个字符判断(i++)。

4.统计文件

用split方法,将主串拆分;

首字母变大写的实现方法有很多,我是先将字符串变成了字符数组,然后改变首字母,再通过构造方法变回字符串。

统计数量: 用lastIndexOf方法找到最后出现点的位置,然后截取后面的子串,两层循环遍历,内层:先到第一个不为空的字符串,记录,变为空,然后找到下面

所有相同的字符串,记录,变空,最后输出数目;外层:当数组全为空时退出。

5.类的设计

time类没有什么好说的,tostring方法输出规定格式;

职员类:字段中有时间对象和部门对象;

部门类: 字段中有时间对象,项目经理(职员对象),和职员数组(包括了项目经理);

测试类:以部门对象为主要对象,外层循环实现部门对象,内层循环实现职员对象,第一个职员对象作为部门经理,最后职员对象数组传给部门对象;

为了验证实现是否正确,遍历了所有部门以及部门中的职员;相关查询操作:总的来说,先遍历部门,在部门中职员,因为部门中有职员对象的引用,职员对象中

也有部门对象引用,可以通过部门对象找到要找的职员,也可以通过职员找到部门,或者他的经理等等,查询很方便,在程序中我是查询的职员编号,然后输出了该职员的所有信息,包括他的部门和经理。

(三)代码托管(务必链接到你的项目)



https://gitee.com/hebau_java_cs16/Java_CS02tx

java技术第二次作业的更多相关文章

  1. 2017-2018-1 JAVA实验站 第二周作业

    2017-2018-1 JAVA实验站 第二周作业 小组成员: 组长 20162318张泰毓 成员 20162303石亚鑫 20162304张浩林 20162307张韵琪 20162321王彪 201 ...

  2. 2017《Java技术》预备作业01

    2017<Java技术>预备作业 1.学习使用MarkDown 本学期的随笔都将使用MarkDown格式,要求熟练掌握MarkDown语法,学会如何使用标题,插入超链接,列表,插入图片,插 ...

  3. 2017《JAVA技术》预备作业

    1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? ==我期望的师生关系是长辈和晚辈,前辈和后生,朋友与朋友之间的关系,作为晚辈,要尊敬长辈,不能对长辈进行言语攻击和起冲突:作为后生,要谨遵教诲 ...

  4. 2017-2018-1 Java演绎法 第二周 作业

    团队任务:讨论Android上的游戏软件 参考现代软件工程 第一章 [概论]练习与讨论: 软件有很多种,也有各种分类办法,本次团队任务是讨论选取Android上的一个游戏软件,考虑到每位组员接触的游戏 ...

  5. 2017《JAVA技术》预备作业-计科1502-19-何俏依

    1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我期望的师生关系是长辈和晚辈,前辈和后生,朋友与朋友之间的关系,作为晚辈,要尊敬长辈,不能对长辈进行言语攻击和起冲突:作为后生,要谨遵教诲,有 ...

  6. 《Java技术》第一次作业——Java语言基础

    学习总结 Scanner类实现基本数据输入的方法 Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配.然后可以使用不同的 next 方法将得到的标记转换为不同类型的值. ...

  7. 《Java技术》预备作业总结

    Java预备作业总结 第一次的博客作业完成了,对于一种崭新的形式,大家可能还不太适应,学习和借鉴好的理念和学习方式,是我们缩小差距.提升自己的第一步. 关于你期望的师生关系 从幼儿园到大学,大家接触到 ...

  8. 2017《Java技术》预备作业02

    1.学习使用Git和码云托管代码 参考资料:如何使用Git和码云 安装Git 在码云注册账号,新建项目,名称为Java-CS01(02)XXX, 一班为CS01,二班为CS02,后三位或两位为姓名缩写 ...

  9. 《Java技术》第一次作业

    (一)学习总结 1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明. (1)使 ...

随机推荐

  1. 列表控件QListWidget

    列表控件可以让我们以列表形式呈现内容,是界面更加有序美观.QListWidget列表控件应当与QListWidgetItem一起使用,后者作为项被添加入列表控件中,也就是说列表控件中的每一项都是一个Q ...

  2. 进度条QProgressBar

    import sys from PyQt5.QtCore import Qt, QTimer from PyQt5.QtWidgets import QApplication, QWidget, QP ...

  3. c#将前端传来的Json解析成对象

    描述:因工作中需要将C#中的Json字符串转换为对象,对此记录下. 解决办法: 1.前端传过来的Json字符串,OrderAppModuleJson即前端传递到后端的Json字符串 string st ...

  4. RunLoop 原理和核心机制

    搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研究了RunLoop的原理和特性. RunLoop的 ...

  5. js获取对象的最后一个

    Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-i ...

  6. 蒙特卡罗定位(Particle Filter Localization)笔记

    善始善终,这篇文章是Coursera课程Robotics: Estimation and Learning最后一周的课程总结.里面的小哥讲得不是很清晰,留下的作业很花功夫(第二周课程也是酱紫). 这周 ...

  7. 简述JavaScript作用域与作用域链

    关于变量作用域的知识,相信学习JavaScript的朋友们一定早已经接触过,这里简单列举: JavaScript中变量是以对象属性的形式存在的:全局变量是全局对象的属性:局部变量是声明上下文对象的属性 ...

  8. 【一通百通】c/php的printf总结

    程序语言都是触类旁通的,讲人话就是[一通百通].so今天说说工作中常用的printf的用法吧. 1.先说说PHP printf()函数: printf()函数的调用格式为: printf(" ...

  9. vue系列之flex经典案例

    案例分析: 1.中间文字居中 2.文字俩边有横线 横线无法固定宽度,因为在大屏手机上,容易出现Bug,宽度不够,俩边会出现大量空隙 解决办法,使用flex布局(网站链接) 代码: <div cl ...

  10. 目标检测的图像特征提取之(一)HOG特征(转)

    看过很多介绍HOG的博文,讲的最清楚的是这位博主:http://blog.csdn.net/zouxy09/article/details/7929348 代码如下: #include <ope ...