一,面向对象编程:
面向对象的三大特征:
1,封装性:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏, 即内部操作对外部而言不可见(保护性)。
2,继承性:它可以使用现有类的所有功能,并且在无需重新编写原来的类的情况下对这些功能进行扩展。
3,多态性:指一个类实例的相同方法在不同情形下有不同表现形式,多态机制使具有不同内部结构的对象可以共享相同的外部接口。
面向对象的最大特征:对现实生活进行抽象。
二,类
类是指共性的概念(自行车的设计图),对象指的是一个具体的,可以使用的事物(一辆辆的自行车)。
首先产生类(类是生产对象的蓝图),然后才可以产生对象,对象的所有行为,一定在类中进行了完整的定义。
1,定义:class 类名称{
1,属性;
2,方法;
3,构造方法;
}
2,如何定义属性:修饰符(modifer) 变量类型 变量名称;// 可以为变量赋值,不赋值时为默认值(元素类型的默认值)
3,如何定义方法:修饰符(modifer) 返回值类型 方法名称(形参类型){
}
4,如何定义构造方法:修饰符(modifer) 类名称 (形参列表){
}
①方法名称必须与类名称相同
②构造方法没有返回值类型声明
③每一个类中一定至少存在一个构造方法(没有明确定义,则系统会自动生成一个无参构造)
三,对象
1,构造对象的语法/对象实例化的语法(create object/instance):
①类名称 ②对象名称 = ③new ④类名称();
①任何对象都应该有其对应的类,类是对象的蓝图
②是唯一的标记,引用一块堆内存
③表示开辟新的堆内存空间
④构造方法
一个文件中只能有一个public 的类
2,对象全部存放在堆区,主要保存属性。
Person p=new Person( ); //p是一个person类型的引用,指向一个Person类型的对象
3.Person p=new Person(“xxx”,2,1);
①new 计算对象需要的内存大小,开辟空间,初始化为0
②Person(“xxx”,2,1)调用构造方法,对属性初始化
③p构造方法调用结束,返回一个指向新对象的引用
4,没有明确的定义过构造方法,编译器就会补一个构造方法,一旦定义过构造方法了,无论是什么样的构造方法,默认这个无参的构造 方法就不再添加了,构造方法允许重载。
5,对象中存储的最主要的就是属性,也可以找到方法区中对象的相对应的类。
6,如何访问对象的属性:
①在类的内部:
class Person(){
int a;
int b;
public void methodA(){
a=10;//在类的内部直接访问对象的属性
methodB();
}
public void methodB(){
}
}
②在类的外部:
class Main{
public void static main(){
Person p=new Person();
p.a;//在类的外部访问对象的属性
p.methodA();
}
}
总结:内部:属性:直接通过属性名称访问
方法:直接通过方法名称调用
外部:属性:引用.属性名称
方法:引用.方法名称(实参列表)
7,容易混淆的点:嵌套调用: System.out.println(Arrays.tostring(rotate(new int[ ]{1,2,3,4,5},3)));
int[ ] tmp1=new int[ ] {1,2,3,4,5}
int[ ] tmp2=rotate(tmp1,3)
String tmp3=Array.toString(tmp2)
System.out.println(tmp3)
链式调用: class A{
public A create(){
return new A;// A tmp1=new A();return tmp1;
}
}
class B{
public static void main(){
new A ().create().create.create.create// A tmp1=new A();
} A tmp2=tmp1.create()
A tmp3=tmp2.create()
A tmp4=tmp3.create()
}
8,Person p=null;//定义了一个没有指向任何对象的person类型的引用(类类型的引用)
Person p=new Person();//①定义了一个person类型的对象
②定义了一个指向Person类型的对象的Person类型的引用(类类型的引用)
引用类型和指向的对象类型是两回事
四, This关键字
1,在构造方法中调用其它构造方法,调用语句必须出现在第一行
2,通过this访问属性或方法(一般出现在命名遮挡的时候(name shadowing))
3,this代表当前对象的引用(corrent object)
普通属性和普通方法其实都绑定着一个隐含的对象。