一、◆抽象和封装
1、现实世界是“面向对象”的,面向对象就是采用“现实模拟”的方法设计和开发程序。
从现实中抽象出类:①发现类 ②发现类的属性 ③发现类的方法
用面向对象的思想描述面向对象的世界,符合人类的思维习惯。
(类图用于分析和设计类,更直观、容易理解。)
2、面向对象设计的过程就是抽象的过程。
类是一类事物抽象的、概念上的定义。对象是实际存在的该事物的个体,是具体的、现实的。
3、方法重载:同一个类中包含两个或两个以上的方法,它们方法名相同,方法参数顺序、个数或类型不同,则称该方法被重载了。(与返回值、访问修饰符无关。)
4、构造方法:创建类的对象。主要作用在于创建对象时执行一些初始化操作(附初始值)。可以通过构造重载来实现多种初始化行为。
系统会提供一个空的构造方法, 但是如果有有参构造,那么系统则不会自动生成无参构造。
构造方法没有返回值类型,如果有,则不是构造方法,而是和构造方法同名的成员方法
★语法: 访问修饰符 构造方法名(){
//初始化代码
}
(没有返回值类型、名称和类名相同。 ☆作用:创建对象。用对象名.属性名调用属性。用对象名.方法名调用方法。)
5、封装:将类的成员属性声明为私有的,同时提供公有的方法实现对成员属性的存取操作。(getter/setter)
(封装是面向对象的三大特性之一。好处:隐藏类的细节;只能通过程序规定的方法来访问数据;方便加入存取控制语句,限制不合理操作。)
6、this关键字是对一个变量的默认引用,用以区别同名成员变量。
①this调用成员变量:成员变量和局部变量相同,必须用this;否则可以省略。
②this调用成员方法:this可以省略,直接调用print()。[例:this.print();]
③this调用重载构造:只能在构造方法使用,必须是构造方法第一条语句。
因为this在对象内部指代自身的引用,所以this只能调用实例变量、实例方法、构造方法
this不能调用类变量和类方法、局部变量
访问权限(由小到大):private(私有的,类中)→friendly(默认,同一个包中)→protected(受保护的,同包,项目中不同包的子类)→public(共有的,项目所有)
static修饰符:
可以修饰属性、方法、代码块
(可以方便调用,用类名,对象名都可以调用)
static修饰的变量属于这个类所有,通常把static修饰的属性和方法称为类属性和类方法,不使用Static修饰的属性和方法属于单个对象,通常称为实例属性和实例方法
public class StaticTest {
static int i;
static int m=30; //类属性
int j;
int k =25; //实例属性
static{ //静态代码块,创建对象之前就执行
i=10;
System.out.println("i的初始化值为:"+i);
}
public StaticTest(){ //声明对象以后就执行了
j=20;
System.out.println("j的初始化值为:"+i);
}
public static void getNum(){
System.out.println("得到i的值为:"+i);
}
public static void main(String[] args) {
StaticTest st = new StaticTest();
System.out.println("i的值为:"+StaticTest.i); //类属性/类方法可通过*类名*和对象名访问
st.getNum(); //通过对象名访问静态方法
StaticTest.getNum(); //通过类名也能访问静态方法
System.out.println("m的值为:"+st.m); //这次是通过对象访问类属性也可用类名访问
System.out.println("k的值为:"+st.k); //实例属性只能通过对象名访问
}
}
输出结果:
i的初始化值为:10
j的初始化值为:10
i的值为:10
得到i的值为:10
得到i的值为:10
m的值为:30
k的值为:25
static先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了
更为重要的是this和super都无法出现在static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象.如果使用的是类来调用而不是对象,则 this就无法指向合适的对象.所以static 修饰的方法中不能使用this.
静态方法中不能用this和super关键字
方法中不能定义Static变量,也就是说,类变量不能是局部变量