类与对象的区别是什么? 类是对某一类事物的描述,是抽象的、概念上的定义; 而对象则是实际存在的属该类事物的具体的个体,因而也称为实例。如何定义一个类?类的结构是怎样的? 定义类实际上就是定义类的属性与方法。
[类修饰符] class 类名称 {
[修饰符] 数据类型 成员变量名称;
...
[修饰符] 返回值的数据类型 方法名(参数1,参数2,...) {
语句序列;
return [表达式];l
}
}
定义一个类时所使用的修饰符有哪几个?每个修饰符的作用是什么?是否可以混用? public 将一个类声明为公共类,它可以被任何对象访问,一个程序的主类必须是公共类 abstract 将一个类声明为抽象类,没有实现的方法,需要子类提供方法的实现 final 将一个类声明为最终类即非继承类,表示它不能被其他类所继承 friendly 友元类型,默认的修饰符,只有在相同包中的对象才能使用这样的类 类的访问控制符只有一个public。其他的修饰符中,abstract和final相互对立,所以不能同时应用在一个类的定义中。成员变量的修饰符有哪些?各修饰符的功能是什么?是否可以混用? public 公共访问控制符。指定该变量为公共的,它可以被任何对象的方法访问 private 私有访问控制符。指定该变量只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此变量 protected 保护访问控制符。指定该变量可以被它自己的类及其子类访问,在子类中可以覆盖此变量 friendly 默认的友元访问控制符,在同一个包中的其他类可以访问此变量,而其他包中的类不能访问该变量 final 最终修饰符。指定此变量的值不能改变 static 静态修饰符。指定该变量被所有对象共享,即所有的实例都可使用该变量 transient 过渡修饰符。指定该变量是一个系统保留,暂无特别作用的临时性变量 volatile 易失修饰符。指定该变量可以同时被几个线程控制和修改 其中成员变量的访问控制符private和protected可以组合一起使用。除了访问控制修饰符有多个之外,其他的修饰符都只有一个。一个成员变量可以被两个以上的修饰符同时修饰,但有些修饰符是不能同时定义在一起的。成员方法的修饰符有哪些?各修饰符的功能是什么?是否可以混用? public 公共访问控制符。指定该方法为公共的,它可以被任何对象的方法访问 private 私有访问控制符。指定该方法只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此方法 protected 保护访问控制符。指定该方法可以被它的类及其子类访问 friendly 默认的友元访问控制符,在同一个包中的其他类可以访问此方法,而其他包中的类不能访问该方法 final 最终修饰符。指定该方法不能被重载 static 静态修饰符。指定不需要实例化一个对象就可以激活的方法 synchronized 同步修饰符。在多线程程序中,该修饰符用于在运行前,对它所属的方法加锁,以防止其他线程访问,运行结束后解锁 native 本地修饰符。指定此方法的方法体是用其他语言(如C)在程序外部编写的 允许private和protected组合在一起来修饰一个方法;其他修饰符都只有一个。当用两个以上的修饰符来修饰一个方法时,需要注意,有的修饰符之间是互斥的。成员变量和局部变量的区别有哪些? (1)从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或方法的参数;成员变量可以被public、private、static等修饰符所修饰,而局部变量则不能被访问控制修饰符及static所修饰;成员变量和局部变量都可以被final所修饰。 (2)从变量在内存中的存储方式上看,成员变量是对象的一部分,而对象是存在于堆内存,而局部变量是存在于栈内存的。 (3)从变量在内存中的生存时间上看,成员变量是对象的一部分,它随对象的创建而存在,而局部变量随着方法的调用而产生,随着方法调用的结束而自动消失。 (4)成员变量如果没有被赋初值,则会自动以类型的默认值赋值(有一种情况例外,被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值,必须显示赋值后才能使用。创建一个对象使用什么运算符?对象实体与对象的引用有何不同? 利用new运算符创建新的对象,并指派给前面所创建的变量。 引用变量是指向由类创建的对象的实体,所以可将它视为“对象的名称”,因而简称对象。事实上,对象的引用是指向对象实体的变量,而非变量本身。对象的成员如何表示?
<对象名>.<对象成员>
在成员变量或成员方法前加上关键字“this”表示什么含义? 如果要强调是“对象本身的成员”的话,则可以在成员名前面加this关键字,即“this.成员名”。此时this即代表调用此成员的对象。什么是方法的返回值,返回值在类的方法里的作用是什么? 一个方法如果没有返回值,则在该方法的前面用void来修饰;如果返回值的类型为简单数据类型,只需在声明方法的前面加上相应的数据类型即可;同理,若需方法返回一个数组,则必须在该方法的前面加上数组类型的修饰符。在方法调用中,使用对象作为参数进行传递时,是“传值” 还是“传址”,对象作参数起到什么作用? 当参数是基本数据类型时,则是传值方式调用,而当参数是引用类型的变量时,则是传址方式调用。什么叫匿名对象?一般在什么情况下使用匿名对象? 当一个对象被创建之后,在调用该对象的方法时,也可以不定义对象的引用变量,而直接调用这个对象的方法,这样的对象叫做匿名对象。 使用匿名对象通常有如下两种情况: (1)如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。 (2)将匿名对象作为实参传递给一个方法调用。定义一个“student”类,包含的内容有: 成员变量:学号,姓名,性别,班干部否,数学,语文,外语 成员方法:输入,总分,平均分 编程实现这个类,并调用相应的方法输入数据,计算总分和平均分。
import java.io.*;
public class exe6_13 {
public static void main(String args[]) {
Student mStudent = new Student();
mStudent.input();
System.out.println("total score = " + mStudent.totalScore());
System.out.println("average score = " + mStudent.averageScore());
}
}
class Student {
long student_id;
String name;
String sex;
boolean isClassCadre;
int maths_score;
int chinese_score;
int english_score;
String str;
void input() {
BufferedReader buf;
buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("please input the student id:");
try {
str = buf.readLine();
student_id = Long.parseLong(str);
} catch(IOException e1) {
student_id = 0;
}
System.out.println("please input the student name:");
try {
str = buf.readLine();
name = str;
} catch(IOException e1) {
name = "known";
}
System.out.println("please input the sex:");
try {
str = buf.readLine();
sex = str;
} catch(IOException e1) {
sex = "known";
}
System.out.println("please input is class cadre:");
try {
str = buf.readLine();
isClassCadre = Boolean.parseBoolean(str);
} catch(IOException e1) {
isClassCadre = false;
}
System.out.println("please input the score of maths:");
try {
str = buf.readLine();
maths_score = Integer.parseInt(str);
} catch(IOException e1) {
maths_score = 0;
}
System.out.println("please input the score of chinese:");
try {
str = buf.readLine();
chinese_score = Integer.parseInt(str);
} catch(IOException e1) {
chinese_score = 0;
}
System.out.println("please input the score of english:");
try {
str = buf.readLine();
english_score = Integer.parseInt(str);
} catch(IOException e1) {
english_score = 0;
}
}
double totalScore() {
return maths_score + chinese_score + english_score;
}
double averageScore() {
return (double)(maths_score + chinese_score + english_score) / 3;
}
}
以二维数组为参数进行方法调用,计算二维数组各列元素之和,并返回所计算的结果。
import java.io.*;
import java.util.Arrays;
public class exe6_14 {
public static void main(String args[]) {
int a[][] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
Colume mColume = new Colume();
int[] result = mColume.add(a);
System.out.println("result = " + Arrays.toString(result));
}
}
class Colume {
int[] add(int array[][]) {
int[] result = new int[array[0].length];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
result[j] += array[i][j];
}
}
return result;
}
}
注:练习均为博主自己编写,不是标准答案,可能存在问题,可以留言讨论。