一.简答题
1.请描述下NullPointerException和ArrayIndexOutOfBoundsException,ClassCastException
出现的原因以及如何解决?
NullPointerException,空指针异常,根据提示错误行数进行修改对应的出现null的对象
ArrayIndexOutOfBoundsException,数组越界,改回索引值内
ClassCastException,强制类型专管异常,使用instanceof解决
2.this和super的区别
所表示的实例不同 调用的构造不同 访问的成员不同 使用方式不同
3.什么是多态,多态的成员访问特点
同一个对象,在不同时刻表现出来的不同形态
多态中成员访问特点:
A:成员变量
编译看左边,运行看左边。
B:构造方法
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边
(静态和类相关,算不上重写,所以访问是左边)
由于成员方法存在重写,所以运行看右边
4.final关键字的特点是什么
最终的,无法修改的
修饰符,该类不能继承
修饰成员方法,该方法不能被重写
修饰成员变量,此时变量是一个常量-----"自定义常量"
修饰的变量,只能被赋值一次,而且修饰成员变量,必须给一个常量值
修饰局部变量,赋值一次后,不能够再次赋值了
5.请您使用自己的话来描述对多态的理解?
不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性
二.
编程题
1.设计一个台灯类(Lamp)其中台灯有灯泡类(Buble)这个属性,
还有开灯(on)这个方法。设计一个灯泡类(Buble),
灯泡类有发亮的方法,其中有红灯泡类(RedBuble)和绿灯泡类(GreenBuble)
他们都继承灯泡类(Buble)一个发亮的方法,请设计出一段代码可以使台灯开启灯泡发亮
红灯泡发红光,绿灯泡发绿光!(多态)
public class Lamp {
private Buble buble;
public Buble getBuble() {
return buble;
}
public void setBuble(Buble buble) {
this.buble = buble;
}
public void on(Buble buble){
if(buble instanceof RedBuble){
String r=buble.bright();
System.out.println("打开台灯"+r);
}else if(buble instanceof GreenBuble){
String g=buble.bright();
System.out.println("打开台灯"+g);
}
}
}
public abstract class Buble {
public Buble(){
}
public abstract String bright();
}
public class RedBuble extends Buble {
public String bright(){
return "红灯泡发亮";
}
}
public class GreenBuble extends Buble{
public String bright(){
return "绿灯泡发亮";
}
}
public class BubleTest {
public static void main(String[] args){
Lamp lamp=new Lamp();
Buble red=new RedBuble();
Buble green=new GreenBuble();
lamp.on(green);
}
}
2.编写一个Person抽象类,要求含有姓名(name)年龄(age)两个私有属性以及吃饭(eat)
和睡觉(sleep)两个抽象方法,并写出带参构造方法,
创建学生(student)和工人(worker) 两个类,继承Person类,
学生类多出了私有属性学号和学习方法(输出我爱学习),
工 人类多出了私有属性工号和工作方法(输出我爱工作)
public abstract class Person {
private String name ;
private int age ;
public abstract void eat() ;
public abstract void sleep() ;
public Person(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Student extends Person {
private int stucode ;
private String stumens ;
public Student(String name , int age , int stucode){
super(name, age) ;
this.stucode = stucode ;
System.out.println(this.getName()+this.getAge()+this.stucode) ;
}
public void eat(){
System.out.println("食堂吃饭") ;
}
public void sleep(){
System.out.println("我爱学习") ;
}
}
public class Worker extends Person {
private int worcode ;
private String wormens ;
public Worker(String name , int age , int worcode){
super(name, age) ;
this.worcode = worcode ;
System.out.println(this.getName()+this.getAge()+this.worcode) ;
}
public void eat(){
System.out.println("自己做饭") ;
}
public void sleep(){
System.out.println("在家躺着睡觉") ;
}
public void study(){
System.out.println("我爱工作") ;
}
}
public class Mains {
public static void main(String[] args) {
Student s = new Student("张三",18,9527) ;
s.eat();
s.sleep();
Worker w = new Worker("李四",25,9876) ;
w.eat();
w.sleep();
w.study();
}
}
3.已知username 和password都是”admin“,键盘录入用户名和密码和已知的用户名和密码比较,模拟用户登录,给三次机会
如果信息一致,则提示“登录成功”,
否则,提示“您还剩 x 次机会”
如果达到三次了,提示“您的账号被锁定,请联系管理员” (提示:字符串比较:使用equals方法)
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
String userName="admin";
String passWord="admin";
String name=null,pass=null;
int num=0;
Scanner sc=new Scanner(System.in);
while(num<3) {
System.out.println("请输入用户名");
name=sc.nextLine();
System.out.println("请输入密码");
pass=sc.nextLine();
if(name.equals(userName)&&pass.equals(passWord)){
System.out.println("成功登陆系统");
break;
}else {
System.out.println(" 用户名或者 密码错误请重新 输入");
num++;
}
}
if(num>=3){
System.out.println("输入错误3次,退出系统");
System.exit(0);
}
}
}
4.设计程序
定义一个人类,包括属性:姓名、性别、年龄、国籍;包括方法:吃饭、睡觉,工作。
1)根据人类,派生一个学生类,
增加属性:学校、学号;重写工作方法(学生的工作是学习)
2)根据人类,派生一个工人类,增加属性:单位、工龄;重写工作方法(工人的工作是。。。。自己自定义功能)
3)根据学生类,派生一个学生干部类,增加属性:职务;增加方法:开会
4)编写主函数分别对上述3类具体人物进行测试
public class People {
String name;
String gender;
int age;
String nationality;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNationality() {
return nationality;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
public void eat() {
System.out.println("People吃饭");
}
public void sleep() {
System.out.println("People睡觉");
}
public void work() {
System.out.println("People工作");
}
public class Student extends People {
String school;
String schoolId;
public void work() {
System.out.println("学生的工作是学习");
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public String getSchoolId() {
return schoolId;
}
public void setSchoolId(String schoolId) {
this.schoolId = schoolId;
}
}
public class Worker extends People {
String campany;
int workyear;
public void work() {
System.out.println("工人的工作是检查仪容仪表");
}
public String getCampany() {
return campany;
}
public void setCampany(String campany) {
this.campany = campany;
}
public int getWorkyear() {
return workyear;
}
public void setWorkyear(int workyear) {
this.workyear = workyear;
}
}
public class StudentCadre extends Student {
String post;
public void meeting() {
System.out.println("====开会");
}
public String getPost() {
return post;
}
public void setPost(String post) {
this.post = post;
}
}
public class Text {
public static void main(String[] args) {
People s = new People();
Student a = new Student();
StudentCadre c = new StudentCadre();
s.setName("张三");
s.setAge(18);
s.setGender("男");
s.setNationality("中国");
a.setSchool("家里蹲");
a.setSchoolId("513023");
c.setPost("班长");
System.out.println("姓名:" + s.getName());
System.out.println("年龄:" + s.getAge());
System.out.println("性别:" + s.getGender());
System.out.println("国籍:" + s.getNationality());
System.out.println("学校:" + a.getSchool());
System.out.println("学号:" + a.getSchoolId());
System.out.println("职务:" + c.getPost());
s.eat();
s.sleep();
s.work();
}
}
5 .定义一个动物类,里面有一个方法voice(),
定义一个类Cat,实现voice方法
然后增加一种新的动物类型:Pig(猪),实现voice()方法。
定义一个Dog类,实现voice方法
定义一个Store(宠物店)类的getInstance方法:
如果传入的参数是字符串dog,则返回一个Dog对象;
如果传入pig,则返回一个Pig对象;否则,返回一个Cat对象。
提示:字符串进行判断 通过equals(字符串)方法
abstract class Animal{
public abstract void voice();
}
class Pig implements Animal{
public void voice(){
System.out.println("henghengheng");
}
}
class Dog implements Animal{
public void voice(){
System.out.println("wangwangwang");
}
}
class Cat implements Animal{
public void voice(){
System.out.println("喵喵喵");
}
}
class Store{
public Animal getInstance(String name){
if("Pig".equals(name)){
return new Pig();
}else if("Dog".equals(name)){
return new Dog();
}else{
return new Cat();
}
}
}
6.(封装、继承)有以下几个类,根据下面的继承关系,用 Java 代码实现。
a) Circle 类(圆形),属性:半径;方法:求周长、求面积
b) Rect 类(矩形),属性:长、宽;方法:求周长、求面积
c) Square 类(正方形),属性:边长;方法:求周长、求面积
提示:
1) 这三个类均具有求周长和面积的方法;
2) 正方形是特殊的矩形
package com.fxm.test;
public class Test7{
public static void main(String args[]){
Circle c = new Circle();
c.area();
c.girth();
}
}
class Shape{
public double area(){
return 0.0;
}
public double girth(){
return 0.0;
}
}
class Circle extends Shape{
double radius;
public Circle(){}
public Circle(double radius){
this.radius = radius;
}
public void setRadius(double radius){
this.radius = radius;
}
public double getRadius(){
return radius;
}
public double area(){
return (3.14*radius*radius);
}
public double girth(){
return (6.28*radius);
}
}
class Rect extends Shape{
private double length;
private double width;
public void Rect(){}
public void Rect(double length,double width){
this.length = length;
this.width = width;
}
public void setLength(double length){
this.length = length;
}
public void setWidth(double width){
this.width = width;
}
public double getLength(){
return length;
}
public double getWidth(){
return width;
}
public double area(){
return (length*width);
}
public double girth(){
return ((length+width)*2);
}
}
class Square extends Shape{
private double length;
public void setLength(double length){
this.length = length;
}
public double getLength(){
return length;
}
public double area(){
return (length*length);
}
public double girth(){
return (length*4);
}
}
7.假如我们在开发一个系统时需要对员工类类进行设计,程序员是员工,包含3个属性:姓名、工号以及工资。
经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。
请使用继承的思想设计出程序员类和经理类。要求类中提供必要的方法进行属性访问。(多态方式测试)
class Employee{
private String name;
private int eId ;
private int money;
public Employee() {
super();
}
public Employee(String name, int eId, int money) {
super();
this.name = name;
this.eId = eId;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getEId() {
return eId;
}
public void setEId(int eId) {
this.eId = eId;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void getWage() {
System.out.println("已经领取工资");
}
}
class Manager extends Employee{
private int prize;
public Manager() {
super();
}
public Manager(String name, int eId, int money,int prize) {
super(name, eId, money);
this.prize = prize;
}
public int getPrize() {
return prize;
}
public void setPrize(int prize) {
this.prize = prize;
}
public void getWage() {
System.out.println("经理已经领取工资");
}
public void getAward() {
System.out.println("已经领取奖金"+prize);
}
}
class Programmer extends Employee{
public Programmer() {
super();
}
public Programmer(String name, int eId, int money) {
super(name, eId, money);
}
public void getWage() {
System.out.println("程序员已经领取工资");
}
public void love() {
System.out.println("程序员很辛苦,但是工资很高...");
}
}
public class Test2 {
public static void main(String[] args) {
Programmer programmer = new Programmer("程序员",10010,5000);
System.out.println("name:"+programmer.getName());
System.out.println("num:"+programmer.getEId());
System.out.println("money:"+programmer.getMoney());
programmer.getWage();
System.out.println("-----------------------");
Manager manager = new Manager();
manager.setName("经理");
manager.setEId(11001);
manager.setMoney(10000);
manager.setPrize(3000);
System.out.println("name:"+manager.getName());
System.out.println("num:"+manager.getEId());
System.out.println("money:"+manager.getMoney());
manager.getWage();
manager.getAward();
}
}