(一)学习总结
1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?
构造方法是一种特殊的方法,与一般的方法不同是:
1.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
2.构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。
3.不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。
方法重载:
1.必须在同一个类
2.方法名相同
3.方法参数个数或参数类型(或参数顺序)不同
程序不能运行,没有传参数。
2.运行下列程序,结果是什么?分析原因,应如何修改。
程序不能运行,没有实现对象实例化。
3.运行下列程序,结果是什么?说明原因。
结果是false。因为比较的是地址,不是数值。
4.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。在这个阶段定义对象的接口。通常,应禁止直接访问一个对象的实际表示,而应通过操作接口访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少最低限度。类的封装性即不能让外面的类随意修改一个类的成员变量在定义一个类的成员,使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用为实现封装性,常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有 读取和赋值操作,我们一般定义两个方法来实现这两种操作,即set get函数。
5.阅读下面程序,分析是否能编译通过?如果不能,说明原因。
(1)不能编译,因为secret是私有的。
(2)不能编译,因为X不是静态的。
6.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出测试类代码和Book类的部分代码,将代码补充完整。
import java.util.*;
class Book{
int bookId;
String bookName;
double price;
public static int 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 static int totalBook(){
return n;
}
public String toString(){
return "编号"+bookId+"书名"+bookName+"价格"+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。
Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。
单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用,那么单例模式也许是一个值得考虑的选择。
8.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。
结果是 你好 Wolld
(二)实验总结
1.用面向对象思想完成评分系统
import java.util.*;
class Xuanshou implements Comparable<Xuanshou>{
private String xingming;
private String bianhao;
private double fen;
public Xuanshou(String bianhao,String xingming,double fen){
this.setxingming(xingming);
this.setbianhao(bianhao);
this.setfen(fen);
}
public void setxingming(String xm) {
xingming=xm;
}
public void setbianhao(String bh) {
bianhao=bh;
}
public void setfen(double f) {
fen=f;
}
public String getxingming() {
return xingming;
}
public String getbianhao() {
return bianhao;
}
public double getfen() {
return fen;
}
public int compareTo(Xuanshou o) {
if (this.fen > o.fen) {
return -1;
} else if (this.fen < o.fen) {
return 1;
} else {
return 0;
}
}
public void shuchu() {
System.out.println(getxingming()+" "+getbianhao()+" "+getfen());
}
}
class pingwei{
int renshu;
int fen[]= new int[999];
int i,j,k;
double pingjun,sum=0;
Scanner input = new Scanner(System.in);
public pingwei(int renshu){
this.setrenshu(renshu);
}
public void setrenshu(int rs) {
renshu=rs;
}
public double jisuan(String s1){
sum=0;
for(i=0;i<renshu;i++){
System.out.println("请第"+(i+1)+"位评委打分");
fen[i]=input.nextInt();
}
for(i=0;i<renshu;i++){
for(j=0;j<renshu-1;j++){
if(fen[j]>fen[j+1]){
k=fen[j];
fen[j]=fen[j+1];
fen[j+1]=k;
}
}
}
System.out.println("去掉一个最低分"+fen[0]+"
去掉一个最高分"+fen[renshu-1]);
for(i=0;i<renshu-2;i++){
fen[i]=fen[i+1];
sum+=(double)fen[i];
}
pingjun=sum/(renshu-2);
System.out.println(s1+"号选手的最终得分为"+pingjun);
return pingjun;
}
}
public class ABC {
public static void main(String[] args) {
int n,m,i;
double x;
pingwei a;
String s1,s2;
Scanner input = new Scanner(System.in);
System.out.println("请输入选手数");
n = input.nextInt();
System.out.println("请输入评委数");
m= input.nextInt();
a=new pingwei(m);
Xuanshou[] xs=new Xuanshou[n];
for(i=0;i<n;i++) {
System.out.println("请输入第"+(i+1)+"个选手的编号");
s1=input.next();
System.out.println("请输入第"+(i+1)+"个选手的姓名");
s2=input.next();
x=a.jisuan(s1);
xs[i]=new Xuanshou(s1,s2,x);
}
Arrays.sort(xs);
System.out.println("姓名 编号 得分");
for(i=0;i<n;i++) {
xs[i].shuchu();
}
}
}
2.Email验证
import java.util.*;
public class ABC {
public static void main(String[] args) {
String x;
int a, b;
Scanner input = new Scanner(System.in);
System.out.println("请输入邮箱地址");
x = input.next();
if (x.indexOf("@") != -1) {
a = x.indexOf("@");
if (x.indexOf(".") != -1) {
b = x.indexOf(".");
if (a < b) {
if (x.startsWith("@") == false) {
if (x.endsWith("com") == true) {
System.out.println("有效");
} else if ((x.endsWith("cn") == true) || (x.endsWith("net") == true)
|| (x.endsWith("gov") == true) || (x.endsWith("edu") == true)
|| (x.endsWith("org") == true)) {
System.out.println("有效");
} else {
System.out.println("无效");
}
} else {
System.out.println("无效");
}
} else {
System.out.println("无效");
}
} else {
System.out.println("无效");
}
} else {
System.out.println("无效");
}
}
}
3.查找子串
import java.util.*;
public class ABC {
public static void main(String[] args) {
String x,y;
int a = 0,i,j,k;
Scanner input = new Scanner(System.in);
System.out.println("请输入字符串");
x=input.next();
System.out.println("请输入要查找的字符串");
y=input.next();
k=x.indexOf(y);
if(k==-1){
a=0;
}
else{
for(i=0;i<x.length();i++){
if(k==-1){
continue;
}
j=k+1;
a++;
k=x.indexOf(y,j);
}
}
System.out.println(a);
}
}
4.统计文件
import java.util.*;
public class ABC {
public static void main(String[] args) {
String x;
int i;
Scanner input = new Scanner(System.in);
System.out.println("请输入文件名,用逗号分开");
x=input.next();
String y[]=x.split("\,");
}
}
5.类的设计
import java.util.*;
class zhigong{
private String xingming;
private String xingbie;
private String shengri;
private String bumen;
private String gongling;
public zhigong(String xingming,String xingbie,String shengri,String bumen,String gongling){
this.setxingming(xingming);
this.setxingbie(xingbie);
this.setshengri(shengri);
this.setbumen(bumen);
this.setgongling(gongling);
}
public void setxingming(String xm) {
xingming=xm;
}
public void setxingbie(String xb) {
xingbie=xb;
}
public void setshengri(String sr) {
shengri=sr;
}
public void setbumen(String bm) {
bumen=bm;
}
public void setgongling(String gl) {
gongling=gl;
}
}
class bumen{
private String bianhao;
private String mingcheng;
private String jingli;
public bumen(String bianhao,String mingcheng,String jingli){
this.setbianhao(bianhao);
this.setmingcheng(mingcheng);
this.setjingli(jingli);
}
public void setbianhao(String bh) {
bianhao=bh;
}
public void setmingcheng(String mc) {
mingcheng=mc;
}
public void setjingli(String jl) {
jingli=jl;
}
}