一、填空题
1.类是组成Java程序的基本要素,类体有两部分构成:一部分是___变量__ 的定义,另一部分是 ______ 方法________ 的定义。
2.执行Person p = new Person();语句后,将在_ 堆内存_ 中给Person对象分配空间,并在__ 栈 __内存中给引用变量p分配空间,存放Person对象的引用。
3.___ 构造方法_____ 是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并且不书写返回值类型,在创建对象实例时由new运算符自动调用。
4.局部变量的名字与成员变量的名字相同,若想在该方法内使用成员变量,必须使用关键字 ______this _______ 。
5.使用关键字 ____this______来调用同类的其它构造方法,优点同样是以最大限度地代码的利用程度 ,减少程序的维护工作量。
6.用关键字____static ____修饰的成员变量是类变量,类变量是指不管类创建了多少对象,系统仅在第一次调用类的时候为类变量分配内存,所有对象共享该类的类变量。
7.使用static修饰的变量称为静态变量,静态变量可以有两种访问方式,分别是类名.静态变量名和_ 对象名.静态变量名。
8.在一个类文件中的关键字package,import,class出现的可能顺序是__ package import class______。
9 _____package_______关键字作为Java源文件的第一条非注释性语句,指明该源文件定义的类所有的包。
10______java.lang_________ 包是Java语言的核心类库,它包含了运行Java程序必不可少的系统类,使用该包下的类和接口不需要使用import导入。
二、选择题
- 在Java中,以下程序编译运行后的输出结果为( D )。(选择一项)
public class Test {
int x, y;
Test(int x, int y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Test pt1, pt2;
pt1 = new Test(3, 3);
pt2 = new Test(4, 4);
System.out.print(pt1.x + pt2.x);
}
}
A 6
B. 34
C. 8
D. 7
- 分析如下Java程序的代码所示,则编译运行后的输出结果是( C )。(选择一项)
public class Test {
int count=9;
public void count1(){
count=10;//局部变量改变了全局变量的值,因此值就变了
System.out.println("count1="+count);
}
public void count2(){
System.out.println("count2="+count);
}
public static void main(String[ ] args) {
Test t=new Test();
t.count1();
t.count2();
}
}
A
count1=9;
count2=9;
B.
count1=10;
count2=9;
C.
count1=10;
count2=10;
D.
count1=9;
count2=10;
3.以下语句中关于Java构造方法的说法错误的是( B )。(选择一项)
A. 构造方法的作用是为创建对象进行初始化工作,比如给成员变量赋值
B. 一个Java类可以没有构造方法,也可以提供1个或多个构造方法
C. 构造方法与类同名,不能书写返回值类型
D. 构造方法的第一条语句如果是super(),则可以省略,该语句作用是调用父类无参数的构造方法
1、构造函数函数名与类名相同
2、构造函数没有返回值类型,void也不行。
3、构造函数不能写return语句。
4.、构造函数就在创建对象时自动调用,一般不能显式地直接调用
5、构造方法可以被重载。没有参数的构造方法为默认构造方法
6、构造方法不能用static、final、synchronized、abstract和native修饰
7、类中定有构造方法,若不写,系统会自动添加无参构造方法
4.在Java中关于静态方法,以下说法中正确的是( AC )。(选择两项)
A 静态方法中不能直接调用非静态方法
B. 非静态方法中不能直接调用静态方法(递归)
C. 静态方法可以用类名直接调用
D. 静态方法里可以使用this
(一)静态方法的调用:一般用类名.方法名,也可以用对象名.方法名
Java中工具类里面的工具方法一般都用static修饰,作为静态方法。(二) JAVA中静态方法总结:
1.静态方法可以直接调用同类中的静态成员,但是不能直接调用非静态成员。
因为:静态成员在对象创建之前就要写入内存,而非静态成员还不存在内存中。
2.在普通成员方法中,可以直接访问同类的非静态变量和静态变量。
3. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法(三)静态方法和非静态方法区别:
- 非静态方法既可以访问静态数据成员又可以访问非静态数据成员,而静态方法只能访问静态数据成员;
- 非静态方法既可以访问静态数据方法又可以访问非静态数据方法,而静态方法只能访问静态数据方法。
解析:静态方法和静态数据成员会随着类的定义而分配和装入内存中; 但是,非静态方法和非静态数据成员只有在类的对象创建时才会分配和装入在对象的内存中。
5.下列选项中关于Java中类方法的说法错误的是( AC )。(选择二项)
A 在类方法中可用this来调用本类的类方法
B. 在类方法中调用本类的类方法时可直接调用
C. 在类方法中只能调用本类中的类方法
D. 在类方法中调用实例方法需要先创建对象
三、判断题
1.类可以看成一类对象的模板,对象可以看成该类的一个具体实例。( T )
2.如果没有为类中的某些成员赋初始值,Java会为类成员赋予固定的初始值,如数值变量的值为0,布尔变量的值为true
,未初始化的引用为null。( F )
3.Java中所有的变量,不管是成员变量还是局部变量,在使用前都必须进行初始化。( F )
4.在Java中对象可以赋值,只要使用赋值运算符
即可,相当于生成了一个各属性与赋值对象相同的新对象。( F )
5.System.out.println(“Hello java!”)中out是System类的一个静态成员变量。( T)
6.构造方法用于创建对象,一般不允许有任何返回值,因此需要在构造方法返回类型处标注为void
。( F)
7.Java语言为所有的Java程序自动导入包“java.lang”,因此Java程序可以直接用“java.lang”中的类和接口。( T )
四、简答题
1.面向过程和面向对象的区别。
答:
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题的事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
2.类和对象的关系
答:类是对象的一个模板,而对象是类的一个具体实例。
3.构造方法的作用和特征
答:作用:对类进行初始化;构造方法的特征:方法名与类名一致,没有返回值类型
4.this关键字的作用和用法
答:this的作用是在类中通过this访问自身的属性和方法
5.简述static关键字的作用。
1.static修饰的变量为静态变量,静态变量在内存中只有一份存储空间,静态变量不属于某个实例对象,被一个类中的所有对象所共享,属于类,所以也叫类变量,可以直接通过类名来引用。
2.static修饰静态方法的访问方式为 类名.方法名,也可以用对象名.方法名
3.静态变量和静态代码块的加载都是在类加载器加载完成以后,再加载到一块固定内存区,按代码编写的顺序依次加载。
4.static修饰的类只能为内部类,普通类无法用static关键字修饰。static修饰的内部类相当于一个普通的类,访问方式为(new 外部类名.内部类的方法() )。
五、编程题
1.定义一个类 Draw , 在 类 中 提供 3 个 方法:
输出直角三角形(drawTrian()) 、
输出矩形(drawRec()) 及平行四边形(drawPra()) 。
通过方法可以输出由“*” 组成的一个图形。
同时在类中包含两个属性:星号的个数(count) 、行数(lines)
最后在测试类中进行调用。
public class Draw {
private int count;//星号“*”数
private int lines;//行数
//打印直角三角型
public void drawTrian(int lines){
int count=0;
for (int i = 0; i < lines; i++) {
for (int j = 0; j <=i ; j++) {
System.out.print(" * ");
count++;
}
System.out.println("\n");
}
System.out.println("直角三角形有:"+lines+"\t行\t"+count+"个星号");
}
//打印矩形
public void drawRec(int lines,int row){
int cout=0;
for (int i = 0; i <lines ; i++) {
for (int j = 0; j <row ; j++) {
System.out.print(" * ");
cout++;
}
System.out.println("\n");
}
System.out.println(lines+"\t行\t"+row+"\t列\t"+cout+"\t个星号");
}
//打印平行四边形
public void drawPra(int lines,int row){
int count=0;
for (int i = 0; i <lines ; i++) {
//打印空格三角形,
for (int k = 0; k <=i ; k++) {
System.out.print("\t");
}
//打印每行row个星号
for (int j = 0; j <row ; j++) {
System.out.print(" \t* ");
count++;
}
System.out.println("\n");
}
System.out.println(lines+"\t行\t"+row+"\t列\t"+count+"\t个星号");
}
}
public class Test(){
public static void main(String[] args) {
Draw draw = new Draw();
draw.drawTrian(4);
System.out.println("\n");
draw.drawPra(3,6);
System.out.println("\n");
draw.drawRec(4,5);
}
}
2.定义一个表示学生信息的类 Student,要求如下:
(1)类 Student 的属性如下:
sNO 表示学号;
sName 表示姓名;
sSex 表示性别;
sAge 表示年龄;
sJava:表示 Java 课程成绩。
(2)类 Student 带参数的构造方法:
在构造方法中通过形参完成对成员变量的赋值操作。
(3)类 Student 的方法成员:
getNo():获得学号;
getName():获得姓名;
getSex():获得性别;
getAge()获得年龄;
getJava():获得 Java 课程成绩
(4) 根据类 Student 的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生 Java 语言成绩的平均值,以及计算并输出他们 Java 语言成绩的最大值和最小值。
public class Student {
String sNO ; //学号
String sName; //姓名;
String sSex; //性别
int sAge;//年龄
int sJava;//Java 课程成绩
//有参构造
public Student(String sNO, String sName, String sSex, int sAge, int sJava) {
this.sNO = sNO;
this.sName = sName;
this.sSex = sSex;
this.sAge = sAge;
this.sJava = sJava;
}
//对应getter方法
public String getsNO() {
return sNO;
}
public String getsName() {
return sName;
}
public String getsSex() {
return sSex;
}
public int getsAge() {
return sAge;
}
public int getsJava() {
return sJava;
}
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student("18400001", "张三", "男",19,90);
Student s2 = new Student("18400002", "李四", "女",18,92);
Student s3 = new Student("18400003", "王五", "男",20,83);
Student s4 = new Student("18400004", "赵六", "男",21,75);
Student s5 = new Student("18400005", "钱七", "男",19,97);
System.out.println("\t学号\t姓名\t姓别\t年龄\t成绩");
System.out.println("\t"+s1.getsNO()+"\t"+s1.getsName()
+"\t"+s1.getsSex()+"\t"+s1.getsAge()+"\t"+s1.getsJava());
System.out.println("\t"+s2.getsNO()+"\t"+s2.getsName()
+"\t"+s2.getsSex()+"\t"+s2.getsAge()+"\t"+s2.getsJava());
System.out.println("\t"+s3.getsNO()+"\t"+s3.getsName()
+"\t"+s3.getsSex()+"\t"+s3.getsAge()+"\t"+s3.getsJava());
System.out.println("\t"+s4.getsNO()+"\t"+s4.getsName()
+"\t"+s4.getsSex()+"\t"+s4.getsAge()+"\t"+s4.getsJava());
System.out.println("\t"+s5.getsNO()+"\t"+s5.getsName()
+"\t"+s5.getsSex()+"\t"+s5.getsAge()+"\t"+s5.getsJava());
int d = (s1.getsJava()+ s2.getsJava()+ s3.getsJava()
+ s4.getsJava()+ s5.getsJava())/5;
System.out.println("java语言平均成绩:"+d);
}
}