《Java技术》的第二次作业
(一)学习总结
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技术》的第二次作业的更多相关文章
- 《Java技术》 第二次作业
java第二次作业 (一)学习总结 1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法.举例说明equals方法和==的区别. 在Eclips ...
- 《Java技术》第二次作业--面向对象基础
(一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? public class Test { public static void main(String a ...
- 《java技术》第二次作业
(一)学习总结 1.什么是构造方法?什么是构造方法的重载? 1)没有返回值,名字与类名相同,当新对象被创建的时候,构造函数会被调用,要想构造函数,必须声明对象并对其初始化.每一个类都有构造函数,如果没 ...
- 2017-2018-1 Java小组-1623 第二周作业
2017-2018-1 Java小组-1623 第二周作业 关于游戏软件的问题 讨论结果 20162301张师瑜 20162305李昱兴 20162306陈是奇 20162308马平川 2016231 ...
- Java程序设计的第二次作业
本次作业包含两个部分:一是以下4个题目的程序源码和运行结果截图:二是本次作业的小结(谈谈你在做作业的过程中遇到了哪些问题,如何解决,有哪些收获). 1.编写“人”类及其测试类.1.1 “人”类: 类 ...
- 2017《Java学习》第二次作业 计科1502任秀兴
学习git总结 安装git 1. 安装完成后执行命令git --version查看版本 2.执行命令git config --global user.nam "你的用户名",执行命 ...
- JAVA实训第二次作业
一维数组的创建和遍历. 声明并创建存放4个人考试成绩的一维数组,并使用for循环遍历数组并打印分数.要求: (1) 首先按"顺序"遍历,即打印顺序为:从第一个人到第四个人: (2) ...
- 2017《java技术预备作业》
2017<java技术预备作业> 1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 亦师亦友,很多人这样说,确实,倘若师生之间如果中间有些隔阂最终吃亏的始终是学生.我认为师生之间应 ...
- JAVA第二次作业展示与学习心得
JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...
- Java第二周作业
Java第二周作业 本周作业: 参考http://www.cnblogs.com/rocedu/p/7911138.html 学习第二三章视频 参考http://www.cnblogs.com/roc ...
随机推荐
- DES加密实现的思想及代码
感谢: http://blog.csdn.net/yxstars/article/details/38424021 上面的日志非常清晰的写出了这个DES加密的过程,主要存在初始IP置换,然后中间存在8 ...
- Web Api 过滤器之 ExceptionFilter 异常过滤器
一.服务器出现异常,会统一向客户端返回 500 的错误. [RoutePrefix("api/test")] public class TestController : ApiCo ...
- LDAP是什么
LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.LDAP目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的 ...
- SQL执行计划分析
explain执行计划中的字段以及含义在下面的博客中有详细讲述: https://blog.csdn.net/da_guo_li/article/details/79008016 执行计划能告诉我们什 ...
- python爬虫requests的使用
1 发送get请求获取页面 import requests # 1 要爬取的页面地址 url = 'http://www.baidu.com' # 2 发送get请求 拿到响应 response = ...
- Mysql中autocommit的用法
定义 Mysql文档原文:SET autocommit disables or enables the default autocommit mode for the current session. ...
- jdk的server模式修改无效(关于client和server模式)
本机为64位操作系统,64位jdk,win10. 修改C:\Program Files\Java\jre8\lib\amd64\jvm.cfg无效. 我的文件的内容为: 原因参考如下: http:// ...
- log4j将日志文件输出到相对路径
建议直接使用jvm中定义的变量或者操作系统的环境变量. log4j.appender.logfile.File=${user.dir}/logs/app.log,使用tomcat容器时${user.d ...
- Struts(二十二):国际化
如何配置国际化资源文件? 1.Action范围资源文件:在Action类文件所在的路径建立名为ActionName_language_country.properties的文件: 2.包范围资源文件: ...
- Spring(4)——面向切面编程(AOP模块)
Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...