Java面向对象基础知识及封装性
一.本章知识点:
1.面向对象的概念
二.本章“定理”:
1.面向对象,定义一个物体时(窗口),除了指定物体的属性,(如,窗口大小,位置,颜色等),还要指定窗口应该有的动作(隐藏,移动,最小)。这是一种主语与谓语的关系。
2.面向对象的三大特征:
——封装(Encapsulation)
——继承(Inheritance)
——多态(Polymorphism)
3,类和对象时面向对象方法的核心概念:
——类:是对某一事物的描述,是抽象的,概念上的;类描述了对象的属性,行为(方法,函数);
——对象:是实际存在的该类事物的每个个体,因而也成为实例(instance);
一个类可以产生多个对象;面向对象的重点是类的设计;
4.对象的产生(如Person类的对象)
Person p1=new Person();
首先,通过new关键字,在堆内存中创建一个Person对象(会对其中各种类型的成员变量自动进行初始化赋值),然后栈内存中分配一个Person变量p1,p1就是对象的引用句柄(对象本身在堆内存中),引用变量的值等于对象在堆中的首地址。以后用引用变量代表堆中的对象;通过引用变量调用对象的成员;<对象名>.<对象成员>;
5.对象的比较:“==”运算符与equals方法的区别
——“==”运算符用于比较两个变量的值是否相等
——equals用于比较两个对象的内容是否一样
6.比较数组内容是否一致,用Arrays.equals方法
7.System.out.println(Object obj);//
1.按照平台默认字符串编码将String.valueof(Object)方法生成的字符串转换为字节,并完全以write(int)方法的方式写入这些字节;
String.valueof(Object obj);//如果obj值为null,则字符串等于“null“,否则,返回obj.toString()的值;
obj.toString()通常会返回一个“以文本方式表示“此对象的字符串。
return getClass().getName() + '@' + Integer.toHexString(hashCode())
;
8.当一个对象被创建时,首先会调用构造函数,在构造函数中可以初始化一些信息,构造函数可以重载。如果没有显示的定义构造函数,系统会默认的生成一个无参的构造函数,如果自己显示的定义过了,那么系统就不会给提供无参构造函数了;
9.this是什么?
在每个成员方法内部,都有一个this引用变量,指向调用该方法的对象的首地址;当一个构造方法调用另一个构造方法时我们用this(参数 );
10.垃圾回收机制
finalize()方法是在Object类中定义,每个类都可以继承;当对象被清理掉之后系统会自动调用finalize()方法;System.gc()函数可以强制进行垃圾回收;
三. 本章知识“为什么”:
1.为什么属性变量一般使用私有(private)?
实现类的封装性:如果一个外面的程序可以随意修改一个类的成员变量,会造成不可预知的程序错误,就像一个人的身高,我们不能被外部随意修改,只能通过各种摄取营养的方法去修改这个属性。所以我们使用private修饰符,作用是成员成了私有成员,只能被这个类的其他成员方法调用,不能被其他类中的 方法所调用;只有通过public方法来对这个变量进行访问。
四.学生信息表(包括排序);
可以有两种方法实现:
第一种方法
//s1,s2,s3,s4分别是Student的实例对象;
TreeSet al=new TreeSet();
al.add(s1);
al.add(s2);
al.add(s3);
al.add(s4);
Iterator it=(Iterator) al.iterator();
//TreeSet 实现了自动排序,也可以让Student类实现Comparable接口,重新compare
第二种方法
ArrayList al=new ArrayList();
al.add(s1);
al.add(s2);
al.add(s3);
al.add(s4);
Iterator it=(Iterator) al.iterator();
Collections.sort(al);
用这种方法排序时,student类必须实现Comparabler接口,重新compare方法;