1、 面向对象的三大特征是______、和。
2、 在Java中,可以使用关键字______来创建类的实例对象。
3、 定义在类中的变量被称为______,定义在方法中的变量被称为______
4、 面向对象程序设计的重点是______的设计,______是用来创建对象的模板。
5、 在非静态成员方法中,可以使用关键字______访问类的其它非静态成员。
6、 当一个对象被当成垃圾从内存中释放时,它的______方法会被自动调用。
7、 被static关键字修饰的成员变量被称为______,它可以被该类所有的实例对象共享。
8、 在一个类中,除了可以定义属性、方法,还可以定义类,这样的类被称为______。
10、所谓类的封装是指在定义一个类时,将类中的属性私有化,即使用______关键字来修饰。
回答:
1、在定义一个类的时候,如果类的成员被private所修饰,该成员不能在类的外部被直接访问。
2、Java中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。
3、声明构造方法时,不能使用private关键字修饰。
4、类中static修饰的变量或方法,可以使用类名或对象的引用变量访问。
5、方法内部类中不能访问外部类的成员变量。
回答:
1、类的定义必须包含在以下哪种符号之间?
A、方括号[] B、花括号{} C、双引号“” D、圆括号()
2、下面哪一个是正确的类的声明?
A、 public void HH{…} B、 public class Move(){…}
C、 public class void number{} D、 public class Car{…}
3、在以下什么情况下,构造方法会被调用?
A、 类定义时 B、 创建对象时 C、 调用对象的方法时 D、 使用对象的变量时
4、下面对于构造方法的描述,正确有哪些?(多选)
A、方法名必须和类名相同
B、方法名的前面没有返回值类型的声明
C、在方法中不能使用return语句返回一个值
D、当定义了带参数的构造方法,系统默认的不带参数的构造方法依然存在
5、使用this调用类的构造方法,下面的说法正确的是?(多选)
A、使用this调用构造方法的格式为this([参数1,参数2…])
B、只能在构造方法中使用this调用其它的构造方法
C、使用this调用其它构造方法的语句必须放在第一行
D、不能在一个类的两个构造方法中使用this互相调用
6、下面哪些可以使用static关键字修饰?(多选)
A、 成员变量 B、局部变量 C、成员方法 D、成员内部类
7、关于内部类,下面说法正确的是?(多选)
A、成员内部类是外部类的一个成员,可以访问外部类的其它成员
B、外部类可以访问成员内部类的成员
C、方法内部类只能在其定义的当前方法中进行实例化
D、静态内部类中可以定义静态成员,也可以定义非静态成员
8、请先阅读下面的代码
public class Test {
public Test(){
System.out.println("构造方法一被调用了");
}
public Test(int x){
this();
System.out.println("构造方法二被调用了");
}
public Test(boolean b){
this(1);
System.out.println("构造方法三被调用了");
}
public static void main(String[] args) {
Test test = new Test(true);
}
}
上面程序的运行结果为下列哪一项?
A、构造方法一被调用了 B、构造方法二被调用了
C、构造方法三被调用了 D、以上三个选项之和
9、Outer类中定义了一个成员内部类Inner,需要在main()方法中创建Inner类实例对象,以下四种方式哪一种是正确的?
A、 Inner in = new Inner() B、Inner in = new Outer.Inner();
C、 Outer.Inner in = new Outer.Inner(); D、Outer.Inner in = new Outer().new Inner();
回答:
阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果。否则请说明编译失败的原因。
代码一:
class A {
private int secret = 5;
}
public class Test1 {
public static void main(String[] args) {
A a = new A();
System.out.println(a.secret++);
}
}
代码二:
public class Test2 {
int x = 50;
static int y =200 ;
public static void method() {
System.out.println(x+y);
}
public static void main(String[] args) {
Test2.method();
}
}
代码三:
public class Outer {
public String name="Outer";
private class Inner {
String name="inner";
void showName(){
System.out.println(name);
}
}
public static void main(String[] args) {
Inner inner = new Outer().new Inner();
System.out.println(inner.name);
}
}
回答:
编译不能通过;在类A中secret前用的是private,因此在text1中无法编译;
编译不能通过;由public static void method() 可知,int x和int y前都要加上static,保持一致;
在静态方法method()中不能访问非静态成员变量x
编译通过;结果为inner;
1、构造方法和普通的成员方法有什么区别?
2、什么是方法重写?
3、什么是多态?
4、抽象类和接口的区别?
回答:
构造方法的方法名和类名要一样,且没有返回值,系统会自动隐式生成。普通方法不能new ,只有构造方法才能new。
构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。而普通方法只有在使用的时候才会被调用。在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值
重写:需要有继承关系,子类重写父类的方法!
1、方法名必须相同
2、参数列表必须相同
3、修饰符:范围可以扩大,但是不能缩小
public > protected > default > private
4、抛出的异常:范围可以被缩小,但不能扩大:ClassNotFoundException(小) -->Exception(大)
重写:子类的方法和父类必须要一致;方法体不同。
重写都是方法的重写,与属性无关
为什么需要重写?
1、父类的功能子类不一定需要,或者不一定满足!
快捷键:Alt + Insert : override
@Override //注解:有功能的注释!
无法重写:
1、static 方法,属于类,它不属于实例
2、final 常量
3、private 方法
多态:即统一方法可以根据发送对象的不同而采用多种不同的行为方式。(多态是方法的多态,没有属性)
/*
多态注意事项:
1、多态是方法的多态,属性没有多态
2、父类和子类,有联系 ——>类型转换异常! ClassCastException!
3、存在条件: 继承关系,方法需重写,父类引用指向子类对象!father f1 = new Son();
*/
abstract 抽象类:本质上还是是类 extends: 单继承; 接口的子类使用 implements 关键字来实现接口,需要提供接口中所有声明的方法的实现,利用接口实现多继承。不能new抽象类,只能靠子类去实现它;抽象类中可以写普通方法;抽象方法必须在抽象类中
接口中的所有定义的方法都是抽象的 public abstract
1、键盘录入一个字符串,把该字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符) 11
2、键盘输入若干字符串,利用StringBuilder完成字符串反转。
3、请按照以下要求设计一个学生类Student,并进行测试。
要求如下:
1)Student类中包含姓名、成绩两个属性
2)分别给这两个属性定义两个方法,一个方法用于设置值,另一个方法用于获取值.
3)Student类中定义一个无参的构造方法和一个接收两个参数的构造方法,两个参数分别为姓名和成绩属性赋值
4)在测试类中创建两个Student对象,一个使用无参的构造方法,然后调用方法给姓名和成绩赋值,一个使用有参的构造方法,在构造方法中给姓名和成绩赋值
回答:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//创建一个扫描器对象,用于接受键盘数据
System.out.println("请输入一个字符串");
if(scanner.hasNext()){//判断用户有没有输入字符串
String str = scanner.next();//程序会一直等待用户输入完毕
String firstStr = str.substring(0, 1);//获得首字符
String Str= firstStr.toUpperCase();//首字符变大写
String substring = str.substring(1);//获取原字符串第一个字符后面的剩余字符
System.out.println(Str + substring);
}
scanner.close();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String a=scanner.nextLine();
StringBuilder b =new StringBuilder(a);
System.out.println("字符串反转后的结果为"+b.reverse());
while (a != null && !a.equals("")) {//当输入的为空或非字符串时结束
System.out.println("请输入一个字符串");
a = scanner.nextLine();
StringBuilder c =new StringBuilder(a);
System.out.println("字符串反转后的结果为"+c.reverse());
}
System.out.println("end of input string");
scanner.close();
}
}
public class Student {//学生类
private String name;//名字
private int score;//成绩
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String Name;//名字
public int Score;//成绩
}
public class Application {//测试类
public static void main(String[] args) {
System.out.println("有参:");
Student s1 = new Student();
s1.setName("小明");
System.out.println(s1.getName());
s1.setScore(99);
System.out.println(s1.getScore());
System.out.println("==============================");
System.out.println("无参:");
Student s2 = new Student();
s2.Name = "小红";
s2.Score = 98;
System.out.println(s2.Name);
System.out.println(s2.Score);
}
}