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

一、实验总结

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

(1)构造方法用于在创建对象是对其进行初始化

Person per = newPerson();

特点:1)方法名与类名相同;

2)方法名前没有返回值类型的声明,方法中不能使用return语句返回一个值;

3)用户不能直接调用,而是通过关键字new自动被调用;

4)在构造方法的实现中,也可以进行方法重载。

注:如果一个类没有声明一个明确的构造方法,则java运行时系统会自动提供缺省的构造方法,它没有任何参数,什么也不做。

2.构造方法的重载

方法的重载就是方法名称相同,但参数的类型和参数的个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用。

注:如果一个类中已经明确定义了构造方法,则系统不再提供默认的构造方法。因此,为了避免出现错误,在一个类中如果定义了一个有参的构造方法时,最好再定义一个无参的 构造类型。

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;

}

运行结果

005cae6e2a793392780d6e7c1ad2becf.png

原因:对象为初始化就直接引用对象值或方法

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的地址空间不同,在堆中的连续两个空间中,所以obj1和obj2不相等,所以返回false

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

类的封装性即不能让外面的类随意修改一个类的成员变量。

在定义一个类的成员(包括变量和方法),使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。

为了实现封装性,常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问呢。对一个变量的操作,一般都有读取和赋值操作,我们一般定义两个方法来实现这两种操作,即getXxx()与setXxx()

setter:

public void setBalance(int balance){

this.balance=balance;

}

getter:

public int getBalance(){

return balance;

}

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的getter和setter

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

// 声明静态变量

public static int x;

//定义静态代码块对静态变量初始化

public Book(){

}

public Book(String bookName,double price){

this.bookId=bookId+(x++);

this.bookName=bookName;

this.price=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;

}

//定义方法求图书总册数

public static int totalBook(){

return x;

}

//重写toString方法

public String toString(){

return "编号:"+this.bookId+" 书名:"+this.bookName+" 价格:"+this.price +" 图书总数目为:"+x;

}

}

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

class sunleton{

private sunleton(){}

public static final sunleton instance = new;

sunleton();

}

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

}

}

运行结果:

834f1747393b5a5aa496966ace068859.png

调用change方法,在change方法中改变了str的值,没有改变主方法中str的值。而ch代表数组的地址,调用change方法改变了ch第一个字符的值后将ch传回主方法。

9.其他需要总结的内容。

内部类是指一个类的内部还包含了另一个的一个操作类,被包含的类称为内部类,包含的类称为外部类。

内部类如果被外部类调用,一定要先产生外部类的实例对象,之后再产生内部类的实例化对象。

静态内部类:

用static声明内部类

静态内部类只能访问外部类的静态成员,而不能访问外部的非静态成员。

在任何非静态内部类中,都不能与静态数据,静态方法或者一个静态内部类。只有静态内部类才可以声明静态成员。

二、实验总结

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

创建三个类 选手类,评分类,测试类 ,各自都有自己的基本属性。定义构造方法getter和setter方法

2.Email验证

创建一个布尔类型方法判断email是否有效

3.查找子串

输入字符串和要查找的字符串使用indexOf("")找到下标位置并记录下来

4.统计文件

字符串用,分隔开,字符串数组用 . 拆分,最后统计每个文件类型出现的次数

5.类的设计

设计四个类

一个日期类,用于记录年、月、日,提供对日期处理的常用方法(日期输出格式xxxx-xx-xx)。

一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加工作时间,设计相应的方法。

一个部门类,包括下列属性:部门编号,部门名称,经理,设计相应方法。

一个测试类,采用对象数组模拟一个拥有两个部门,10个职工的单位,实现对相关信息的查询功能。

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

码云提交历史截图

上传实验项目代码到码云,在码云项目中选择“统计-提交”,设置搜索时间段,搜索本周提交历史,并截图。

57bbdd92484dd58cece663af6adbfdab.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值