java技术第二次作业

(一)学习总结

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

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原理相同,通过传入地址,直接在地址上进行修改;

(二)实验总结

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

https://gitee.com/hebau_java_cs16/Java_CS02tx

原文地址:https://www.cnblogs.com/TX980502/p/8666670.html

时间: 2024-10-10 06:56:55

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

软件测试技术第二次作业

问题描述:假设商店货品价格(R)皆不大于100元(且为整数),若顾客付款在100元内(P) ,求找给顾客之最少货币 个(张)数?(货币面值50元(N50),10元(N10),5元(N5),1元(N1)四种). 请采用边界值测试方法中的健壮性测试方法对以上问题设计测试用例,注意需从输入定义域及输出值域两方面进行考虑,并给出详细的分析过程. 备注:以上作业请于2015年10月20日(含)之前做好将一个word或excel文件,以"学号姓名第二次作业"命名,并以附件附件形式发送到[email

java程序设计作业 c.njupt.edu.cn java实现第二次作业

王利国的"Java语言程序设计第2次作业(2018)"详细 作业结果详细 总分:100 选择题得分:60 1. 表达式9==8&&3<7的运算结果是( ) A.1 B.0 C.true D.false 正确答案是: D 2. 表达式(3>2)?8:9的运算结果是( ) A.3 B.2 C.8 D.9 正确答案是: C 3. 表达式9-7<0||11>8的运算结果( ) A.true B.false C.1 D.0 正确答案是: A 4. 表达式4

# 《Java技术》第一次作业

(一)学习总结 1.Scanner类数据的使用方法 需要导入java.util.Scanner 每种数据都有对应的输入方法: 需要留意的是String类型,next()方法碰到空格或者回车即结束输入,如果需要输入一整行,包含空格,应该用nextLine(): char 类型,没有输入的方法: package java练习; import java.util.Scanner; public class S1 { public static void main(String[] args) { //

JAVA技术专题综述之线程篇(1)

本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:synchronized 本文将对以上内容进行讲解. 一:run()和start() 示例1: public cla ThreadTest extends Thread{public void run(){for(int i=0;i<10;i++){Syste

微信公众平台深度开发JAVA版第二季视频教程

微信公众平台深度开发JAVA版第二季(九宝饭店微信点餐系统)视频教程下载密码:qa4a     联系QQ:1026270010 微信作为当前流行的通信社交软件有了上亿的用户量,几乎每一个只能手机都要安装微信.但是,市场上对于JAVA开发微信公众平台的资料却少之又少,多数的资料一般是其他语言的.因此,主讲老师经过潜心研究.认真准备,录制了这套针对JAVA开发语言的微信公众平台开发教程. 1.课程研发环境 开发语言:JAVA WEBServer:TOMAT DATABASE:MySQL 开发工具:m

2017面向对象程序设计(Java)第二周学习总结

2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为第一周学长正在家里吃西瓜吹空调.好了,闲言少叙.我先为你们介绍一下助教的职责,而后再对你们的学习情况进行总结! 身为你们本学期Java课程的助教...之一,我的任务是:指导你们学习,批改我所负责学习小组的实验作业.阅读博文并回复.其他学习小组会有另外三位助教负责.由于我们每周五都会汇总你们的情况,其

Java技术综述

自己打算好好学习下Java,所以想先明晰Java开发中到底有哪些技术,以便以后学习的过程中,可以循序渐进,随着学习的深入,本文将不断更新. Java基础教程将Java的入门基础知识贯穿在一个实例中,逐步深入,可以帮助你快速进入Java编程的世界.万事开头难,逐步跟着这个教程走一遍,对Java应该就会有一种入门的感觉了.然后再去学习更高级的主题,或者更深入地学习其中的某些知识点. 首先学习Java的一些基础知识,包括: Java开发环境安装与配置 Eclipse的安装与使用 面向对象基础 基本数据

[留念贴] C#开发技术期末大作业——星月之痕

明天就要去上海大学参加 2015赛季 ACM/ICPC 最后一场比赛 —— EC-Final,在这之前,顺利地把期末大作业赶出来了. 在这种期末大作业10个人里面有9个是从网上下载的国内计算机水平五六流大学里学习编程,我感到压力很大. 但我依然选择作死——纯手工打造.庆幸的是,历时四天,翘课无数,现在基本完工了. 下载地址:http://pan.baidu.com/s/1pKx6OnL(还有一些小问题,但是逻辑上的BUG不存在了) 下载之后先解压,然后打开DestroyStars\Destroy

第二课作业——redis常用命令

第二课时作业 静哥 by 2016.2.23~2016.2.22   [作业描述] 1.key string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令,把执行结果截图贴出来 2.举例说明list和hash的应用场景,每个至少一个场景,比如:通过list实现秒杀的请求排队 [作业一:key string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作