当前位置: 首页 > 编程日记 > 正文

《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)在Java中,允许在一个类中定义多个构造方法。

(2)在创建对象时,系统会自动根据所调用的构造方法中包含的参数类型,个数,选择匹配的构造方法创建对象。

(3)构造方法的注意事项

(4)如果在类中没有明确定义构造方法,系统会自动调用默认的构造方法。

(5)如果指定了构造方法,则不调用默认的构造方法。

(6)如果已经指定了有参的构造方法,而又要调用无参的构造方法,则要在类中追加无参构造。

下面的程序不能通过编译,new Foo()错误,应创建构造函数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;
}

数组没有正常初始化,程序只是对arr数组进行了声明,并没有初始化。
修改为:

public class Test {public static void main(String[] args) {MyClass[] arr=new MyClass[3];for(int i=0;i<3;i++){arr[i]=new MyClass();}arr[1].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,比较的是地址

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

封装就是把属性和方法捆绑到一起,封装到一个对象中去,形成一个不可分割的独立单位,修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值方法和赋值方法,用于对这些属性的访问。通过封装,可以实现对属性的数据访问限制,同时增加了程序的可维护性。

public class Worker {private int no; private Datet bir,sta; private String name,sex;private Home whome;
}public Worker(String name,String sex,int no,Datet bir,Datet sta) { this.name=name; this.sex=sex; this.no=no; this.bir=bir; this.sta=sta;}public void setbir(Datet bir){this.bir=bir;} public void setsta(Datet sta){sta=sta;}

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

不能,在A定义中对secret进行了封装,在主类函数内无法直接对secret进行操作。可以利用get set 方法,或者将secret变为 public属性。

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

不能正确编译通过,因为没有定义类型为 Test 的对象,Test.method();应该在前面定义一个Test 对象,先在Test的定义里写出定义方法 比如

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

class Book{int bookId;String bookName;double price;static int count=1000;public Book(String bookName, double price) {this.bookName = bookName;this.price = price;}public int getbookId(){return bookId;}public void setbookId(int bookId){this.bookId=bookId;}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   Book() {count++;}public  String toString(){return "图书编号:"+this.bookId+"书名:"+this.bookName+"书价:"+this.price+"产生对象个数:"+count;}     }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("图书总数为:"+"count"); for(Book book:books){System.out.println(book.toString());}}}

7.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。

一个类有且仅有一个实例,并且自行实例化向整个系统提供,实例控制:单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。灵活性:因为类控制了实例化过程,所以类可以灵活更改实例化过程。节约内存性。缺点是:可能无法访问库源代码,所以可能会意外发现自己无法直接实例化此类。
代码如下:

public class Sun {private static Sun instance = null;private Sun() {}public synchronized static Sun getInstance() {if (instance == null) {instance = new Sun();}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

9.总结

(1)面向对象

类的定义和实例化调用,重载
重写类成员和实例成员的区别
简单类的设计
掌握String类的常用方法
继承的实现方法
成员变量的继承和隐藏

(2)面向对象高级

多态性
转型
接口和抽象类(概念)
利用接口进行排序

(二)实验总结

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

import java.util.Scanner;
import java.util.Arrays;
class Judges {Scanner in=new Scanner(System.in);private int judgeer;private double[] score;public Judges(){}public Judges(int number){this.judgeer=number;}public void setJudgeer(int judgeer){this.judgeer=judgeer;}public void setScore(double[] score){this.score=score;}public int getJudgeer(){return this.judgeer;}public double[] getScore(){return this.score;}public void inputScore(){score = new double[judgeer];//在输入时进行实例化for(int j=0;j<judgeer;j++){score[j]=in.nextDouble();}/*for(int i=0;i<judgeer;i++){System.out.println(score[i]);}*///System.out.println("inputScore"+score);}public void maxMin(double[] score){//System.out.println("maxMin"+score);Arrays.sort(score);System.out.println("去掉一个最低分:"+score[0]);System.out.println("去掉一个最高分:"+score[judgeer-1]);}public double average(double[] score){//Arrays.sort(score);double sum=0;       for(int k=1;k<judgeer-1;k++){sum=sum+score[k];}sum=sum/(judgeer-2);//System.out.println("average"+score);return sum;}
}
class Player implements Comparable<Player>{private String name;//姓名private int number;//编号private double score;//得分public Player(){}public Player(int number,String name){this.name=name;this.number=number;this.score=score;}public void setName (String name){//setnamethis.name=name;}public void setNumber(int number){//setnumberthis.number=number;}public void setScore(double score){//setscorethis.score=score;}public String getName(){//getnamereturn this.name;}public int getNumber(){//getnumberreturn this.number;}public double getScore(){//getscorereturn this.score;}public String toString(){return "编号:"+number+","+"姓名:"+name+","+"分数"+score+":";}public int compareTo(Player o){if(this.score>o.score){return -1;}else if(this.score<o.score){return 1;}else{return 0;}}
}
import java.util.Arrays;
import java.util.Scanner;
public class Score {public static void main(String[] args){Scanner in=new Scanner(System.in);int numberplay,numberjudge;System.out.println("输入选手人数");numberplay=in.nextInt();Player[] play=new Player[numberplay];//Player plays=new Player();System.out.println("输入评委人数");numberjudge=in.nextInt();Judges judge=new Judges(numberjudge);for(int i=0;i<numberplay;i++){System.out.println("输入选手编号和姓名");play[i]=new Player(in.nextInt(),in.next());System.out.println("输入成绩:");judge.inputScore();//输入成绩double[] a=judge.getScore();//System.out.println("a"+a);judge.maxMin(a);double score=judge.average(a);System.out.println("总成绩为:"+score);play[i].setScore(score);}Arrays.sort(play);for(int i=0;i<numberplay;i++){System.out.println(play[i].toString());}}
}

2.Email验证

import java.util.Scanner;
public class DZ {public static void main(String [] args){System.out.print("请输入电子邮件地址:");Scanner sc=new Scanner(System.in);String str=sc.next();int first=str.indexOf('@');int first1=str.indexOf('.');int last=str.lastIndexOf('.');if(first<1||first1<1||first>first1||(last==str.length()-1)){System.out.println(str+"这是一个不合格的地址");}else if(first1-first>1){System.out.println(str+"这是一个合格的地址");}else{System.out.println(str+"这是一个不合格的地址");}}}

3.查找子串

public class CZ {public static void main(String [] args){String s ="abcbcaadbca";String s1=s;//不改变原字符串int count=0;while(s1.indexOf("bc")!=-1){int index=s1.indexOf("bc");count++;s1=s1.substring(index+2);//返回字符串从index+2开始到字符串}System.out.println(count);System.out.println(s);}
}

4.统计文件

import java.util.Scanner;
public class Files {public static void main(String[] args) {System.out.println("请输入一串文件名,文件名之间用‘,’隔开:");Scanner in=new Scanner(System.in);String str=in.nextLine();String s[]=str.split(",");//字符串分割for(int i=0;i<s.length;i++){char []a=s[i].toCharArray();//文件变成字符数组if(a[0]>=97 && a[0]<=122)a[0]=(char)(a[0]-32);//如果文件的首字母不是大写,将其变成大写s[i]=new String(a);//字符数组变成字符串System.out.println(s[i]); }//String a=new String();for(int i=0;i<s.length;i++){int n=0;int num=s[i].indexOf(".");//找到后缀名String str1=s[i].substring(num);//if(a.indexOf(str1)<0) //{//a=a+str1;for(int j=i;j<s.length;j++)//查找文件{//int num2=s[j].indexOf(".");//String x=s[j].substring(num2);if(/*str1.equals(x)*/s[j].indexOf(str1)!=-1)//文件类型相同{n++;}}System.out.println(str1.substring(1)+"文件有"+n+"个");//}}}
}

5.类的设计

public class Time {private int year;private int month;private int day;private String birthday;public String worktime;private Employee emp;//生日和参加工作时间应属于员工的属性public void setYear(int year){this.year=year;}public int getYear(){return this.year;}public void setMonth(int month){this.month=month;}public int getMonth(){return this.month;}public void setDay(int day){this.day=day;}public int getDay(){return this.day;}public Time(){}public Time(int year1,int month1,int day1,int year2,int month2,int day2){//构造方法birthday=year1+"-"+month1+"-"+day1;worktime=year2+"-"+month2+"-"+day2;}public void setBirthday(int year,int month,int day){this.birthday=year+"-"+month+"-"+day;}public String getBirthday(){return birthday;}public void setWorktime(int year,int month,int day){this.worktime=year+"-"+month+"-"+day;}public String getWorktime(){return worktime;}public Time(int year,int month,int day){//构造方法this.year=year;this.month=month;this.day=day;}/*public String birthday(){return year+"-"+month+"-"+day;}public String worktime(){return year+"-"+month+"-"+day;}
}

(三)代码托管[https://gitee.com/hebau_java_cs16/Java_CS01-wyn/tree/master/ex02]

1031679-20180401194819529-1887876680.png

转载于:https://www.cnblogs.com/1601wyn/p/8662895.html

相关文章:

[置顶] 当我拿车钥匙的时候,刚交的女朋友跑了。。。

转载于:https://www.cnblogs.com/james1207/p/3291906.html

【jstl】jstl的基本操作

1、jstl不属于javaEE标准&#xff0c;所以需要额外引入jar包 2、引入后需要引入标签库 代码实现&#xff1a; <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %> 注&#xff1a; &#xff08;1&#xff09;可以使用 alt / 的快捷…

如何修改Sql2005注册服务器名称 {转载}

1.使用select ServerName可以看到当前数据库的服务器名 2.从Sys.SysServers表中可以看到当前的所有服务器名 3.使用 sp_dropserver servername 将这个服务器名删除。 4.使用 sp_addserver new servername,LOCAL将本地服务器重新添加到服务器表中 5.查询Sys.SysServers表&#x…

据说是腾讯php程序员面试题目 蛋疼..要是提供PHP手册就HI了..

说在前面&#xff1a;&#xff11;、以下题目&#xff0c;除了编程任务外其他都需要写在给你提供的草纸上。纸张是珍贵的地球资源&#xff0c;请节约使用。编程任务在有相应的环境时&#xff0c;会要求上机书写&#xff0c;实在没有条件&#xff0c;就只能写在草纸上了。&#…

C功底挑战Java菜鸟入门概念干货(一)

一、认识Java 1、Java 程序比较特殊&#xff0c;它必须先经过编译&#xff0c;然后再利用解释的方式来运行。 2、Byte-codes 最大的好处是——可越平台运行&#xff0c;可让“一次编写&#xff0c;处处运行”成为可能。 3、使用 classpath 可以指定 class 的运行路径。 二、走…

c# lock (obj) 与 lock (this) 区别

lock(obj) 锁定 obj 对象 lock(this) 锁定 当前实例对象&#xff0c;如果有多个类实例的话&#xff0c;lock锁定的只是当前类实例&#xff0c;对其它类实例无影响。 直接上代码。 主窗体代码如下&#xff1a; delegate void SetTextCallback(string text);public Form1() …

【js】四种自定义对象的常见方法

<html><head></head><body><script type "text/javascript">//方法1var stu1 new Object();stu1.stuName "小强1";stu1.stuNo "123";stu1.print function() {alert(stu1.stuName);}//stu1.print();//alert(s…

eclipse启动时报错An internal error occurred during: Initializing Java Tooling.

eclipse启动时报错An internal error o当前工作目录文件夹下的 /.metadata/.plugins/org.eclipse.core.resources/.project。就是把初始化的项目删除&#xff0c;然后打开eclipse以后可以重新初始化。转载于:https://www.cnblogs.com/huanlingjisi/p/8696541.html

给Sqlite数据库设置密码

免费版Sqlie是不提供设置密码功能的&#xff0c;经过查阅资料最终找到了解决方案 方案一&#xff0c;从sqlite源码入手&#xff0c;据说sqlite源码已经提供了加密的接口&#xff0c;只是免费版没有实现&#xff0c;可以参考这位仁兄的博客以了解详情&#xff1a;http://www.cnb…

《创新者》读书笔记 PB16110698 第五周(~4.5)

本周我阅读了某同学推荐的《创新者》&#xff0c;这本书实际上是两个世纪以来信息技术的编年史&#xff0c;从巴贝奇的差分机到如今互联网时代的超级计算机&#xff0c;作者通过各个时代里一位位杰出的创新者&#xff0c;将计算机诞生、发展、崛起和蓬勃的历程娓娓道来。从一篇…

001本周总结报告

在本周中&#xff0c;自己主要做了小学期的编程作业&#xff0c;因为是小学期的特殊缘故&#xff0c;自己的学习时间几乎分配给了小学期的作业的编程&#xff0c;大约每天会抽出5个小时用来编写程序&#xff0c;本周在做小学期的作业时发现自己编程力不从心&#xff0c;无论是从…

【js】创建数组的三种方法

<html><head></head><script type"text/javascript">//数组var stuName1 new Array();stuName1[1] "小强1";stuName1[2] "小强2";//alert(stuName.length);//声明并穷举数组var stuName2 new Array("小强3&quo…

JSon数据查询---Jlinq

LINQ&#xff0c;语言集成查询&#xff08;Language INtegrated Query&#xff09;是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。 Jlinq受到LinQ的启发&#xff0c;可以像LinQ一样查询JSON数据&#xff0c;使用…

PowerShell 2.0管理事件日志(一)查看和读取事件日志

事件日志是操作系统用来保存本身及其他程序信息的工具&#xff0c;本文将会介绍如何通过PowerShell脚本阅读事件日志并创建新的日志条目。Windows系统中包含多种事件日志&#xff0c;在Windows XP系统中包括4种主要的事件日志。即应用程序、系统、安全性及Internet Explorer日志…

Applet相关知识

1、Applet定义 Applet是采用Java编程语言编写的小应用程序&#xff0c;该程序可以包含在 HTML&#xff08;标准通用标记语言的一个应用&#xff09;页中&#xff0c;与在页中包含图像的方式大致相同。含有Applet的网页的HTML文件代码中部带有<applet> 和</applet>这…

python threading ThreadPoolExecutor源码解析

future: 未来对象&#xff0c;或task的返回容器 1. 当submit后&#xff1a; def submit(self, fn, *args, **kwargs):with self._shutdown_lock: # lock是线程锁if self._shutdown:raise RuntimeError(cannot schedule new futures after shutdown)f _base.Future() # 创建fut…

【js】内置对象array的常见方法的使用

<html><head></head><script type"text/javascript">//数组var stuName1 new Array();stuName1[1] "小强1";stuName1[2] "小强2";//alert(stuName.length);//声明并穷举数组var stuName2 new Array("小强3&quo…

《学习vi编辑器》的学习笔记1

第一章 vi文本编辑器 打开文件vi [filename] 输入:q在缓冲区中内容和磁盘内容一致的时候退出,否则就需要输入:q!来忽略这个限制,不保存缓冲区,直接退出 命令模式:每次输入都表示一个命令. 插入模式:输入的一切内容都将吃味文件中的文本 :wq(属于ex编辑器)命令等价于ZZ命令,就是…

Android的API与差异化之路

Android的API与差异化之路 发挥Android特色&#xff1a;框架API和开源(开放) Android平台就如同长城般&#xff0c;两岸的硬件业厂商就如同关内居民&#xff0c;是建造长城的最先获利者。也基于这样的效益&#xff0c;让许多硬件大厂竞相拥抱Android&#x…

Oracle 高效分页

-- 分页 select * from t_user5 select count(1) from t_user5 --10,485,760 -- rownum是一个查询后的结果&#xff0c;查询之前是不存在的 select rownum,rowid,tt.* from t_user5 tt where rownum<3 and sex1 and rownum>2 -- 对结果进行查询 -- 思路1&#xff0c;r…

Data - 【转】数据分析的道与术

简要说明 本文来自网络流传的“百度内部培训PPT - 数据分析的道与术”&#xff0c;版权属于“百度”&#xff0c;如有冒犯&#xff0c;即刻删除。PDF下载 - 数据分析的道与术什么是数据分析&#xff08;道&#xff09; 1 - 数据分析是什么&#xff1f; 2 - 什么是做好数据分析的…

ruby生成C++头文件引用关系图

首先生成graphviz的dot格式文件 require find class RefNodeattr_accessor :name,:reference end include Find if __FILE__ $0name "name"dot []h Hash.newputs ["digraph #{name}{","overlap false","spline true","rank…

【js】内置对象String的常用方法

<html><head></head><script type"text/javascript">var stuName1 "小强1";var test "abcdcab";//alert(stuName.charAt(1));var stuName2 "小强2";//alert(stuName1.concat(stuName2));//alert(test.inde…

关于Linux静态库和动态库的分析

From:http://hi.baidu.com/bdccutysj/blog/item/5bae7f0202abac7c3912bb15.html1.什么是库 在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统载入内存执行。 由于windows和linux的本质不同&#xff0c;因此二者…

求解|x-y|最小

问题&#xff1a;输入数组a和b&#xff0c;请通过交换的方式重新分配两个数组&#xff0c;使得|a-b|最小 提供一种思路&#xff1a; 当前数组a和数组b的和之差为 A sum(a) - sum(b) a的第i个元素和b的第j个元素交换后&#xff0c;a和b的和之差为 A ( sum(a) - a[i] b…

最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用50

广告客户吴言之前也研究过互联网广告业务模式&#xff0c;具体来讲可以分为六大模式&#xff1a;门户网站广告模式、搜索引擎广告模式、社会化网站广告模式、视频网站广告模式、植入式广告模式、广告联盟模式。对于门户网站广告模式来讲&#xff0c;这是一种push模式&#xff0…

终于遇见——王阳明

一个厉害的人 王阳明&#xff0c;五百年来的一个圣人&#xff0c;最后总结了四句教&#xff1a;无善无恶心之本&#xff0c;有善有恶意之动&#xff0c;知善知恶是良知&#xff0c;为善去恶是格物。看完王阳明的一生&#xff0c;再看到这四句话时&#xff0c;直让人发怔&#x…

【jquery】jquery基础知识

总体介绍&#xff1a; jquery是一个js的类库&#xff0c;为了减少代码量实现更多的功能 1、jquery使用需要引入jquery的类库&#xff0c;其中有一名称带min&#xff08;产品版&#xff09;有一个不带min的&#xff08;开发版&#xff09;&#xff0c;作用相同。当我们同网页打…

针对19端口的Chargen进行Dos***

先普及一下基础吧&#xff1a; 英语全名&#xff1a;Character Generator Protocol 汉语&#xff1a;字符发生器协议 默认端口&#xff1a;TCP 19&#xff0c;UDP 19 本协议在RFC 864中定义。 在TCP连接建立后&#xff0c;服务器不断传送任意的字符到客户端&#xff0c;直到客户…

TCP/IP 简介

原文&#xff1a;TCP/IP 简介 第一节&#xff1a;TCP/IP 简介 第二节&#xff1a;TCP/IP 寻址 第三节&#xff1a;TCP/IP 协议 第四节&#xff1a;TCP/IP 邮件 TCP/IP 是用于因特网 (Internet) 的通信协议。 计算机通信协议 计算机通信协议是对那些计算机必须遵守以便彼此通信的…