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


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

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

    构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。
    1.必须在同一个类2.方法名相同3.方法参数个数或参数类型(或参数顺序)不同
    否,构造函数 Foo()未定义。
    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对arr[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,实例化分配空间地址不一样。
    4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
    封装就是指对外部不可见,外部只能通过对象提供的接口来访问。

    public class Test
    {
        public static void main(String args[]){
            Clerk clerk1=new Clerk("qingfeng",22,5321.12f);
            System.out.println("名字为"+clerk1.name+"薪资为"+clerk1.getSalary());  //只能通过授权的操作(成员方法)进行访问
            
        }
    }
    class Clerk
    {
        public String name ;
        private int age;
        private float salary;
        public Clerk(String name, int age, float sal){     //构造方法
            this.name = name;
            this.age = age;
            this.salary = sal;
        }
        public float getSalary(){      //成员方法
            return this.salary;
        }
    }
    

    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是私有属性,不能通过对象直接访问。
    (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();
        }
    }
    

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

    class Book{
        int bookId;
        String bookName;
        double price;
        // 声明静态变量
        static int num=1000;
        //定义静态代码块对静态变量初始化
        
        //构造方法
        Book (String bookName,double price){
        	this.bookName=bookName;
        	this.price=price;
        	bookId=num++;
        }
         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(){
        	return num;
        }
        //重写toString方法
        public String toString(){
        	return "编号:"+this.bookId+"书名:"+this.bookName+"书价:"+this.price;
        }
    }
    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。
    单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
    1.私有构造方法 2.私有静态引用指向自己实例 3.以自己实例为返回值的公有静态方法

    public class Sun {
            private Sun() {};
            public static Sun instance = new Test();
            public 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。值传递不会改变原有属性的值。
    (二)实验总结
    1.用面向对象思想完成评分系统
    程序设计思路:创建选手类,评分类,测试类,在测试类中创建选手对象,评分类为每位选手打分。
    问题:直接用冒泡排序,没用Arrays方法
    原因:不会用,没理解
    解决方案:同学讲解
    2.Email验证
    程序设计思路:编写一个方法,判断一个email地址是否有效。在main方法中对该方法进行测试。
    问题:没用条件嵌套优化程序
    原因:没想到
    解决方案:同学指出
    3.查找子串
    程序设计思路:编写一个方法,查找在一个字符串中指定子串出现的次数。在main方法中输入字符串和查找的子串,对该方法进行测试。
    问题:将字符串换成字符数组,进行比较
    解决方案:利用substring方法截取字符串进行比较
    4.统计文件
    程序设计思路:
    问题:将文件类型首字母大写,未将文件名首字母大写
    原因:为弄清题意
    解决方案:仔细读题
    5.类的设计
    问题:搞不清关系
    三)代码托管(务必链接到你的项目)
    码云提交历史截图
    上传实验项目代码到码云,在码云项目中选择“统计-提交”,设置搜索时间段,搜索本周提交历史,并截图。
    https://gitee.com/hebau_java_cs16/Java_CS02CQ/tree/master/ex02/src

  • 相关阅读:
    原创电子书《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
    FMX有一套自己的消息处理机制。类似这样:
    如何在 EXCEL 2003 插入的方框内打对勾,复选框
    微信朋友圈视频链接中的视频怎么下载到电脑?
    ie 8在打印网页的时候打印预览是空白的
    如何访问局域网的Access数据库?
    centos 7下载
    在评估一个性能测试工具的时候 我们一般要考虑哪些方向 ?
    外国人专门写了一篇文章,来分析为什么go在中国如此火
    python 编程测试练习答案
  • 原文地址:https://www.cnblogs.com/chenqiu/p/8688889.html
Copyright © 2020-2023  润新知