第三版Java基础入门实战习题集
第一章(有用的话,点个免费的赞吧,我也想快乐一下)
1.如何用记事本写一个Hello World程序,在命令窗口编译和运行,并输出结果。
HelloWorld.java
1 public class HelloWorld {
2 public static void main(String[] args) {
3 System.out.println("这是第一个Java程序!");
4 }
5 }
第二章
1. 编写程序,计算1+3+…+99的值,要求如下:
(1)使用循环语句实现1~99的遍历
(2)在遍历过程中,通过条件判断当前的数是否为奇数,如果是就累加,否则不加。
- public class getSum {
- public static void main(String[] args) {
- int sum = 0;
- for (int i = 1; i < 100; i++) {
- if (i % 2 != 0)
- sum += i;
- }
- System.out.println(sum);
- }
- }
2.使用do… while循环语句计算正数5的阶乘。
- public class Test {
- public static void main(String[] args) {
- int i = 1;
- long sum = 1;
- do {
- sum *= i;
- i++;
- } while (i <= 5);
- System.out.println(sum);
- }
- }
第三章
某公司正在进行招聘工作,被招聘人员需要填写个人信息,编写个人简历的封装类Resume,并编写测试。Resume类图及输出效果
Example.java
class Resume {
private String name;
private String sex;
private int age;
public Resume(){
}
public Resume(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName(){
return name;
}
public String getSex(){
return sex;
}
public int getAge(){
return age;
}
public void introduce(){
System.out.println("姓名:"+this.getName()+"\n性别:"+this.getSex()+"\n年龄:"+this.getAge());
}
}
public class Example{
public static void main(String[] args){
Resume re = new Resume("李四","男",20);
re.introduce();
}
}
第四章
某公司的员工分为5类,每类员工都有相应的封装类,这5个类的信息如下。
(1) Emplovee:这是所有员工的父类。
①属性:员工的姓名、员工的生日月份
②方法: Salary int month)根据参数月份确定工资。如果该月员工过生日,则公司会额外发放100元。
(2) Salariedemployee: Employee的子类,拿固定工资的员工。
属性:月薪
(3) Hourlyemployee: Employee的子类,按小时拿工资的员工,每月工作超出160h部分按照1.5倍工资发放。
属性:每小时的工资、每月工作的小时数。
(4) Salesemployee: Employee的子类,销售人员,工资由月销售额和提成率决定。
属性:月销售额、提成率。
(5) Baseplussalesemploye: Salesemployee的子类,有固定底薪的销售人员,工资底薪加上销售提成。
属性:底薪。
本题要求根据上述员工分类(编写一个程序,实现以下功能:
(1)创建 Employee,分别创建若干不同的 Employee对象,并打印某个用
(2)每个类都完全封装,不允许有非私有化属性。
Employee.java
abstract class Employee{
private String name; //定义姓名name并私有化属性
private int month; //定义生日月份month并私有化属性
public Employee(){} //无参构造器
public Employee(String name,int month){ //有参构造方法
this.name = name; //给属性name初始化赋值
this.month = month; //给属性month初始化赋值
}
//获取属性name的方法
public String getName(){
return name; //返回name属性
}
//获取属性month的方法
public int getMonth(){
return month; //返回month属性
}
//给属性name赋初始值
public void setName(String name){
this.name = name; //本类中的属性name
}
//给属性month赋初始值
public void setMonth(int month){
this.month = month; //本类中的属性month
}
//创建一个方法getSalary()用来计算工资,参数month是月份,如果当月是员工生日,奖 励100元
public double getSalary(int month){
double salary = 0; //定义工资变量
//判断当前月份是否是员 工的生日月份,如果是奖励100元
if(this.month == month){
salary = salary + 100;
return salary; //返回工资salary
}
}
}
SalariedEmployee.java
class SalariedEmployee extends Employee{
private double monthSalary; //封装monthSalary属性
public SalariedEmployee(){} //无参构造方法
//有参构造方法 参数 姓名 生日月份 月薪
public SalariedEmployee(String name,int month,double monthSalary){
super(name,month); //调用父类有参构造方法
this.monthSalary = monthSalary; //为属性monthSalary初始化赋值
}
//获取monthSalary的值
public double getMonthSalary(){
return monthSalary;
}
//给monthSalary赋值
public void setMonthSalary(double monthSalary){
this.monthSalary = monthSalary;
}
//覆盖父类中的方法
public double getSalary(int month){
double salary = monthSalary+super.getSalary(month); //定义工资变量
return salary;
}
}
HourlyEmployee.java
class HourlyEmployee extends Employee{
private double hourlySalary; //定义属性hourlySalary每小时的工资
private int hours; //定义属性hours每月工作的小时数
public HourlyEmployee(){} //无参构造方法
//有参构造方法 参数 姓名 生日月份 每小时的工资 每月工作的小时数
public HourlyEmployee(String name,int month,double hourlySalary,int hours){
super(name,month); //调用父类有参构造方法
this.hourlySalary = hourlySalary ; //为属性hourlySalary初始化赋值
this.hours = hours; //为属性hours 初始化赋值
}
public double getHourlySalary(){ //获取hourlySalary的值
return hourlySalary;
}
public int getHours(){ //获取hours的值
return hours;
}
//定义set方法设置hourlySalary hours的值
public void setHourlySalary(double hourlySalary){
this.hourlySalary =hourlySalary;
}
public void setHourly(int hours){
this.hours = hours;
}
//覆盖父类方法
public double getSalary(int month){
if(hours < 0){ //如果工作小时数小于0 输出数据错误
System.out.println("数据错误");
return 0;
}
//小于160个小时的 按照每个月的工作小时数乘以每小时的工资
else if(hours <= 160)
return hourlySalary*hours+super.getSalary(month);
//超出160个小时的小时数 按照1.5倍计算
else return hourlySalary*160+hourlySalary*1.5*(hours- 160)+super.getSalary(month);
}
}
SalesEmployee.java
class SalesEmployee extends Employee{
private double sales ; //定义销售额sales
private double rate; //定义提成率rate
public SalesEmployee(){}
public SalesEmployee(String name,int month,double sales,double rate){
super(name,month);
this.sales = sales;
this.rate = rate;
}
public double getSales(){
return sales;
}
public double getRate(){
return rate;
}
public void setSales(double sales){
this.sales = sales;
}
public void setRate(double rate){
this.rate = rate;
}
public double getSalary(int month){
return this.getSales()*(1+this.getRate())+super.getSalary(month);
}
}
BasePlusSalesEmployee.java
class BasePlusSalesEmployee extends SalesEmployee{
private double baseSalary; //定义基础工资baseSalary
//无参构造方法
public BasePlusSalesEmployee(){}
//有参构造方法
public BasePlusSalesEmployee(String name,int month,double sales,double rate,double baseSalary){
super(name,month,sales,rate);
this.baseSalary = baseSalary;
}
//get/set方法对私有属性的调用和设置
public double gatBaseSalary(){
return baseSalary;
}
public void setBaseSalary(){
this.baseSalary = baseSalary;
}
public double getSalary(int month){
return baseSalary+super.getSalary(month);
}
}
Test.java
//定义一个测试类
public class Test{
public static void main(String[] args){
//声明一个Employee类型的数组,并创建不同子类型的对象
Employee[] employee = {new SalariedEmployee(“张三”,1,6000),new HourlyEmployee(“李 四”,2,50,180),new SalesEmployee(“王 五”,3,6500,0.15),new BasePlusSalesEmployee(“赵 六”,4,5000,0.15,2000)};
//打印每个员工的工资
for(int i = 0; i < employee.length ;i++)
System.out.println(Math.round(employee[i].getSalary(10)));
}
}
第6章
五、1.每次随机生成10个0~100的随机正整数。
2.计算从今天算起100天以后是几月几日,并格式化成×××X年X月×日的形式打印出来。
提示:
(1)调用Calendar类的add()方法计算100天后的日期。
(2)调用Calendar类的getTime()方法返回Date类型的对象。
(3)使用FULL格式的DateFormat对象,调用format()方法格式化Date对象。
1.
Example.java
- import java.util.Random;
- public class Example {
- public static void main(String[] args) {
- for(int i=0;i<10;i++){
- System.out.println(new Random().nextInt(100));
- }
- }
- }
2.
Test.java
- import java.text.DateFormat;
- import java.util.Calendar;
- import java.util.Date;
- public class Test {
- public static void main(String[] args) {
- Calendar calendar = Calendar.getInstance();
- calendar.add(Calendar.DATE, 100);
- Date date = calendar.getTime();
- DateFormat format = DateFormat.getDateInstance(DateFormat.FULL);
- String string = format.format(date);
- System.out.println(string);
- }
- }
第七章
五
1.编写程序,向ArmsList集合中添加元素,然后遍历并输出这些元素。
2.请发照下列要求编写程序。
(1)写一个Student类,包含name和age属性,提供有参构造方法。
(2)在Snudent 类中,重写 toString()方法,输出age和name的值。
(3)在Student类中,重写hashCode()和equals()方法。
.hshCode()的返回值是name的哈希值与age的和。
.equals()判断对象的name和age是否相同,相同则返回true,不同则返回false。
4)编写一个测试类,创建一个HashSet<Student>对象hs,向hs中添加多个sat对象,假设有两个Student对象相等。输出HashSet集合,观察Student对象是否添加成功。
Example.java
- public class Example {
- public static void main(String[] args) {
- ArrayList list = new ArrayList<>();
- list.add("a");
- list.add("b");
- list.add("c");
- list.add("a");
- for(Iterator it = list.iterator();it.hasNext();){
- System.out.println(it.next());
- }
- }
- }
2.
Test.java
- import java.util.*;
- class Student {
- private int age;
- private String name;
- public Student(int age, String name) {
- this.age = age;
- this.name = name;
- }
- public String toString() {
- return age + ":" + name;
- }
- public int hashCode() {
- return name.hashCode() + age;
- }
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (!(obj instanceof Student))
- return false;
- Student stu = (Student) obj;
- return this.name.equals(stu.name) && this.age == stu.age;
- }
- }
- public class Test {
- public static void main(String[] args) {
- HashSet<Student> hs = new HashSet<Student>();
- hs.add(new Student(18, "zhangsan"));
- hs.add(new Student(20, "lisa"));
- hs.add(new Student(20, "lisa"));
- System.out.print
1.Java是一种面向对象的语言
2.Java语言具有的特点:简单,面向对象,跨平台性,安全性,支持多线程,分布性
3.将Java源文件编译为.class文件的是javac命令。
4.Java语言的跨平台特点是由Java虚拟机保证的。
5..Java程序的运行环境为JRE。
1.Java程序代码必须放在一个类中,类使用class关键词定义。
2.Java中注释有三类,分别是单行注释,多行注释,文档注释。
3.在Java中,int类型所占存储空间为4 字节。
4.数组是一个容器,最小值是0。
5.
1.面向对象的三大特征是封装,继承,多态。
2. 针对类、成员方法和属性,Java提供了4种访问控制权限,分别是private、 ____default____、protected和public。3.静态方法必须使用___static_____关键字来修饰。4.类的封装是指在定义一个类时,将类中的属性私有化,即使用___private_____关键字修 饰。5.在Java中解决成员变量与局部变量名称冲突时,可以使用__this______关键字。
3.静态方法必须使用___static_____关键字来修饰。
4.类的封装是指在定义一个类时,将类中的属性私有化,即使用___private_____关键字修饰。5.在Java中解决成员变量与局部变量名称冲突时,可以使用__this______关键字。
1.在面向对象中,类之间共掌属性和操作的机制称为继承
2.在继承关系中,子类会自动继承父类中的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写
3.final关键字可用于修饰类、变量和方法,它有“无法改变的”或者“最终”的含义。
4.一个类如果要实现一个接口,可以使用关键字implements
5.一个类如果要实现一个接口,那么它就需要重写接口中定义的全部方法,否则该类就必须定义成抽象类
6.如果子类想引用父类的成员,可以使用关键字surper。
1 RuntimeException类及其子类用于表示运行时异常。
2.异常分为两种,分别是运行时异常和编译时异常。
3.thow关键字用于在方法中声明抛出异常的实例对象。
4.如果一个方法要抛出多个异常,可以使用throws关键字,多个异常之间用逗号隔开。
5.自定义异常需要继承Exception。
1.在Java中定义了3个类,用来封装对字符串的操作,分别是String,StringBuffer和StringBuilder。
2. Java中用于获取String字符串长度的方法是Length()。
3. Java中用于将日期格式化为字符串的类是DateFormat。
4. Java中用于产生随机数的类是位于java.util包中的Random。
5.已知sb为StringBuffer的一个实例,且sb.toString()的值为“abcde”,则执行reverse()后,sb.toString()的值为edcba。
1. Collection是所有单列集合的父接口,它定义了单列集合(List和Sat)通用的一些方法。
2.使用Iterator遍历集合时,首先需要调用hashNext()方法判断是否存在下一个元素
若存在下一个元素,则调用next()方法取出该元素
3.如果要对TreeSot集合中的对象进行排序,必须实现Comparable接口。
4.Map集合中的元素都是成对出现的,并且都是以Key(键)、Value(值)的映射关系存在的。
5. ArrayList内部封装了一个长度可变的数组。
1.泛型的作用是支持类型参数化 。型类 型 泛型
2.泛型可以用在类、接口和方法的定义中,分别称为泛型类,泛型接口和泛型方法。
3.在Jaya程序中,经常会有参数类型或返回值类型不确定的方法,这种方法在Java中统称为泛型方法。
4.泛型接口的实现类有两种定义方式,一种是直接接口中明确地给出泛型类型,另一种是直接在实现后声明泛型。
1.反射机制的优点是可以实现动态创建对象和编译。
2.如果想通过Class类实例化其他类的对象,则可以使用newInstance()方法,但是必须保证
被实例化的类中存在一个无参构造方法。
3.通过反射可以得到二个类中的所有方法,需要用到java.lang.reflect包中的Method类
4.在反射操作中,通过getDeclareFieds()可以获得类的信息。 方法可以取得本类中的全部属性。
5.Java 虚拟机在加载.class文件时会产生一个Class对象代表文件,从该对象中可以获得类的信息。
1.Java中的I/O流按照传输数据的不同可分为字节流和字符流
2.java.io包中可以用于从文件中直接读取字符的类是Reader
3.I/O系统提供了两个带缓冲的字节流,分别是
下一篇:
全面详尽的Java学习路径指南
推荐阅读
-
入门知识:Java基础之一
-
Java单元测试实战:如何使用Mock进行基础知识储备
-
Java入门:深入理解包的基础知识
-
入门Go语言基础教程 - 实战练习:等价二叉树构建详解
-
FLUENT 14实战教程之入门篇:1.2 液体流动基础讲解
-
狂神讲解Java系列第1篇:Markdown入门与基础语法指南
-
入门R语言:使用基础R绘制各种函数图表 - 常见初级绘图函数实战指南
-
入门讲解51单片机(C语言第三版) - 第1.2节:8051基础原理
-
深入浅出51单片机C语言教程(第三版) - 第1-2章:8051基础入门
-
从零基础到精通:实战对比 Activiti工作流的入门与实战Hello World示例 (通过API和案例教学)