面向对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。
1、什么是对象?什么是类?类和对象有什么关系?
2、属性如何创建?属性有什么特点?属性如何访问?
3、静态变量如何创建?静态变量有什么特点?静态变如何访问?
4、请创建T141部学生(StudentT141)这个类,要求有姓名、年龄、导师、成绩、班级荣誉等变量。分析这些变量哪些是静态变量,哪些是属性(成员变量)书写这个类。
5、什么包?使用包有什么好处?
6、堆、栈、数据段、代码段各自存放什么数据?有什么特点?
7、垃圾回收回收的是什么?
8、什么是null?如果对null值进行方法和属性的调用会发生什么情况?
9、根据代码画出内存图,并说出结果
public class Student {
public int code;
}
public class Test {
public static void main(String[] args)
int x = 4;
Student s1 = new Student();
Student s2 = new Student();
s1.code = 8;
s2.code = 3;
test(s1,s2,x);
System.out.println(s1.code+" "+s2.code+" "+x);
}
public static void test(Student s2,Student s1,int x){
s1.code = 2;
s2.code = 5;
s2 = s1;
s1.code = s2.code;
s1 = new Student();
s1.code = 10;
s2.code = 7;
x = 15;
}
}
10、静态方法和成员方法应该如何调用?
11、什么是重载?
12、什么是构造方法?构造方法的作用是什么?
13、说说下面的方法哪些重载了构造方法?
public class Test{
public Test(int x){}
}
a、public Test(int y){}//类型相同
b、public Test(String y){}是
c、public void Test(String x){}//没有void
d、public int Test(int y,String x){}方法名前面不声明方法的类型
e、public Test(int y,String x){}是
f、public Test(String x,int y){}是
14、下列哪一行进行了垃圾回收
Object o1 = new Object();
Object o2 = new Object();
Object[] array = new Object[2];
o1 = o2;//o1o2都指向o2的对象,o1所指向的对象的内存空间将会被垃圾回收。
o2 = array[0];
Array[0] = new Object();
o1 = array[0];
15、说出下列代码执行结果
a、public class Test{
public static void main(String[] args){
int j;
System.out.println(j);
}
}
b、public class Test{
static int j;
public static void main(String args){
System.out.println(j);
}
}
c、public class Test{
int j;
public int getNum(){
return this.j;
}
public static void main(String[] args){
System.out.println(getNum());
}
}
d、public class Test{
public String x;
public static void main(String[] args){
Test t = new Test();
String y = "";
System.out.println(t.x.equals(y));
}
}
1.对象:由多个类协同完成一个职能,由属性和行为组成,是存在的具体实体,具有明确定义的特征和行为
类:相同属性的行为。类是对象的抽象,对象是类的实例。类是具有属性和行为的一组对象的集合。
2.属性用于描述对象的特征,对象之间属性彼此独立,一个对象属性的变化不会影响其他属性的变化,、
由于属性是属于一个对象的组成部分,所以属性也叫成员变量。通过对象,可以对属性和方法进行
访问,通过“.”符号进行访问。属性就是对象的实例化,如;
public String id;public String age;其中id,和age就是属性。
3.静态变量创建在对象之外,是所有对象共享的变量,静态变量发生变化,会影响所以的对象有(static)。
通过对象,可以对属性和方法进行访问,通过“.”符号进行访问。属性就是对象的实例化,如;
public static String id;public static String age;就是静态变量。
4.public class StudentT141 {
public String name;//姓名:成员变量
public int age;//年龄:成员变量
public String teacher;//导师:成员变量
public int grade;//成绩:成员变量
public static String classHonour;
//班级荣誉与每个人有关:静态变量
}
5.包(package)就是文件夹,利用包可以组成相关的类,同时可以做到信息的隐藏。使用另一个包时使用
关键字import导入该类,但本包中的类和Java.lang.*中的类无需导入。
6.堆:程序运行时所创建的所有对象都放在堆中,成员变量。
栈:方法中的的局部变量,被调用时传递过来的参数,返回值,以及中间的运算结果。基本引用类型。
对于引用类型的变量,引用变量本身放在栈中,而所指对象在堆中。
数据段:类变量,常量,静态变量。
代码段:方法的定义。
堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期较长,但存取速度较慢。
栈存取速度比堆快仅次于寄存器,栈数据可以共享,但存在栈中的数据大小与生存期必须确定,缺乏
灵活性。堆主要是用来存放对象的,栈主要是用来执行程序的。
7.垃圾回收:回收的是无任何引用的对象占据的内存空间而不是对象本身。垃圾回收机制具体在什么时候
发生动作这是不可预料的。
8.null是关键字,大小写敏感,Java中的任何引用变量都将null作为默认值,不能使用null引用调用任何
的方法和变量。不能调用非静态方法来使用值为null的引用类型变量,不然会抛出空指针异常。
9.输出:5.7.4
10.成员方法只能通过(对象.)的方式调用。静态方法可以通过(类名.)和(对象.)的方式调用。
静态方法加载在对象之前,所以在静态方法中不能直接访问成员方法或成员变量。
11.方法的重载:发生在同一个类中,方法名相同参数列表不同,和返回类型无关,根据调用反法的参数,
决定执行那个重载方法。
-
12.构造方法:方法名和类名相同,没有返回类型,利用构造方法可以产生该类的对象。(没有void)
构造方法的作用:1.为对象分配空间。
2.初始化成员变量。
3.返回该对象的引用。
如果一个类中没有构造方法,那么虚拟机会自动分配一个方法,如果一个类定义了构造方法,那么默认
构造方法不会被定义。
13、说说下面的方法哪些重载了构造方法?
public class Test{
public Test(int x){}
}
a、public Test(int y){}//类型相同
b、public Test(String y){}是
c、public void Test(String x){}//没有void
d、public int Test(int y,String x){}方法名前面不声明方法的类型
e、public Test(int y,String x){}是
f、public Test(String x,int y){}是
(不能定义为void,在方法名前面不声明方法的类型,构造方法可以重载,以参数的个数,类型,顺序)。
14、下列哪一行进行了垃圾回收
Object o1 = new Object();
Object o2 = new Object();
Object[] array = new Object[2];
o1 = o2;//o1o2都指向o2的对象,o1所指向的对象的内存空间将会被垃圾回收。
o2 = array[0];
Array[0] = new Object();
o1 = array[0];
15、说出下列代码执行结果
a、public class Test{
public static void main(String[] args){
int j;
System.out.println(j);
}
}
//不能通过编译,j没有赋值。
b、public class Test{
static int j;
public static void main(String args){
System.out.println(j);
}
}
//运行结果为0;调用静态方法int类型的默认值为0,string的默认值为null。
c、public class Test{
int j;
public int getNum(){
return this.j;
}
public static void main(String[] args){
System.out.println(getNum());
}
}
不能通过编译,成员方法只能通过(对象.)的方式调用
d、public class Test{
public String x;
public static void main(String[] args){
Test t = new Test();
String y = "";
System.out.println(t.x.equals(y));
}
}
//运行错误,空指针错误,不能调用非静态方法来使用值为null的引用类型变量,不然会抛出空指针异常。
null是空对象,String s=null;定义了一个对象s的实例,但未将该实例指向任何空间,而string s="";
表示指向了一个空字符串。
以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章