面向对象概述
面向对象的思想:将世界存在的任何事物都看作一个对象,每个对象拥有自己的属性和行为,面向对象就是“现实模拟”的方式开发设计程序,而面向对象的核心是类,通过调用类的方法来实现各种操作。
面向思想的程序设计
1.抽象出多个类
2.发现类的属性
3.定义类的行为(方法)
创建对象
SE se=new SE(); //创建SE类的对象se
构造方法和重载
public class SE{
public String name;
public int age;
public SE(){}//一个无参的构造方法
public SE(String n,int a){//有参的构造方法
this.name=n;
this.age=a;
}
//构造方法通常用于完成类属性的初始化工作,方法名与类名相同,多个相同的名称,但参数类型和参数个数顺序不同的方法构成了方法重载。
}
一个类在创建时系统会隐式的分配给类一个无参的构造方法,如果显示定义了一个有参的构造方法,那么无惨的构造方法就不存在了,需要显示的声明才能使用!
static修饰符的使用
static 可用于修饰类、方法、属性,static修饰的方法、属性称为类属性类方法,属于本类,而不使用static修饰的方法属于每一个对象称为实例方法、实例属性。
通俗点说就是在使用过程中,static修饰的方法和属性,在调用时可以使用类名.出属性或方法(),也可以通过对象点出属性方法。 而没有static修饰的方法和属性在调用时只能通过对象点出属性和方法。
public class SE{
public static String name; //静态属性
public int age; //非静态属性
public void info(){
//静态字段name赋值
name="";
SE.name="";
this.name=""; // 静态字段不能使用this 编译错误
//非静态字段赋值
age=18;
this.age=18;
SE.age=18; //非静态属性不能使用类名点属性赋值 编译错误
}
}
//定义测试类
public class Test{
public static void main(string[] args){
static String a="小明"; //编译错误 局部方法不能有静态变量 只能定义为全局变量 成为类属性
SE se=new SE();
se.age=18;
se.name=a;//编译错误
}
}
**执行顺序 **
如果在一个类中有静态代码块和非静态代码块以及一个构造方法,那么在类初始化时有着怎样的执行顺序?
可以看到最后结果在程序初始化时首先执行静态代码块,然后非静态,最后才执行了构造方法!
***********必知的堆栈初始化流程
父类静态属性初始化
父类静态块
子类静态属性初始化
子类静态块
父类非静态属性初始化
父类非静态块
父类构造方法
子类非静态属性初始化
子类非静态块
子类构造方法
封装
封装是面向对象的三大特性之一,它将类的状态信息隐藏在类的内部,不允许外部程序直接访问,而是通过类提供的方法间接实现对隐藏类的访问。
封装的实现步骤:修改属性的访问级别,为属性创建一对赋值 setter方法和读取值getter 方法,可在赋值时对属性的取值进行控制。
public class Student{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
//对age的取值进行约束 避免不合理赋值!
public void setAge(int age) {
if(age >18){
this.age=age;
}else{
System.out.println("未成年!");
}
}
******