1.封装:将对象和操作放入一个class中,集合在一起就构成了封装。例如:
有class A
class B
现在有A example = new A(new B)
这样加入了一个B,也就是说我把B这个类放入到了A中进行了封装,可能就多了一些功能。
2.java中局部变量必须赋初始值。成员变量不必赋初始值。
如果成员变量没有初始化,那么他们都有自己的默认值,如:
byte,short,int,long 的初始值都为 0
float,double 的初始值都为 0.0
char 的初始值为 ‘\u0000’ //(Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。
它为每种语言中的每个字符 设定了统一并且唯一的二进制编码,以满足跨语言、
跨平台进行文本转换、处理的要求。)java采用unicode,2个字节(16位)来表示一个字符
boolean 的初始值为 false
3.java中的引用:
例子:
public class Person
{
int a = 20;
public void change(Person person)
{
person.a = 30;
}
public static void main(String[] args)
{
Person person = new person;
int a = person.a;
System.out.println(a);
person.change(person);
a = person.a;
System.out.println(a);
}
}
这里的引用相当于,申请的Person对象放到了堆栈中,它有一个首地址,让后让person来记住它的这个首地址,也就是说person就是这个对象的一个引用,第一个引用调用查找了成员变量的值,让后当用到person.change(person)的时候,的二个person就是新的一个引用,也指向了对象,让后调用函数改变了对象成员变量的值。
总结:一个对象可以有多个引用,但是一个引用只可以有一个对象,并且每个引用改变对象的数据,对象的数据都会改变。
4.类在内存中的分布:
如果没有 static 属性,那么如果有多个同一个类的对象,那么每个对象都有自己的属性区,也就是说用的不同的内存来保存的属性,但是方法共用同一内存区。
如果有static属性。那么每个对象都共用同一个内存。
5.new 完成的三件事情。
例如 A a = new A();
这一句代码执行完毕后完成了三件事情。
一:为这个对象开辟了内存空间。
二:调用了初始化函数。
三:返回了内存地址。
6.继承,封装,多态,重载,重写,派生。
继承,封装就不用说了。
(1)多态:父类型的引用能够指向子类型的对象,例如:Flower fl = new Rose();
多态必须是有封装和继承的基础。
如上例,在调用fl的方法时候,先到父类中查找有没有相应的方法,如果没有则编译错误,如果有再到子类中去查找有没有相应方法,如果子类没有则调用父类的方 法。
也就是用fl来调用方法的时候,fl只能够调用父类有的方法,如果子类重写了,那么就调用子类的,不能够调用子类的新的方法,如果要调用的话就必须要强制类型转换,转换成子类的引用才能够调用新的方法。
多态性的应用:减少了程序的代码和复杂性。这一点具体怎么实现的就不写了。
(2)重载:
就是函数名字相同,参数类型,或者数目不同。
注意方法的返回值不决定方法的重载,例如:public int a(int c)
public char a(int c)
这两个是不能叫做重载的。只和参数有关。
(3)方法的重写:
子类中有和父类中一样的方法。
就重新写入了东西,覆盖掉了父类中的方法。
例如当一个类继承了Thread类,那么就要重写run()方法,最后要调用start()方法,说明start方法调用了run方法。并实现了线程。
如果要不重写,也可以通过super.run()来启动。可以不放在第一行。
7.构造方法也是可以重载的,例如:
public class Test
{
public Test()
{
this(3);
}
public Test(int num)
{
System.out.println(num);
}
}
当调用前一个构造方法的时候可以调用到第二个构造方法。打印出3.
注意:这个this()必须是第一行语句。如同super()必须是第一行语句。
8.任何类如果没有显示地去继承某一个类,那么它就继承java.lang.Object这个类。