面向对象
面向对象程序编程:只是一种编程的思维方式
类 : 是对一类事物的公共属性(变量) 和公共行为(方法) 的描述
对象 : 具体存在并且唯一的一个事物
现实生活中: 先有对象再有类
java中: 先有类后有对象
类和对象的关系:
类是对象的抽象 对象是类的实例
创建类的语法:
class 类名{
成员属性;
成员方法;
}
通过类创建对象的语法:
类名 变量名 = new 类名();
如何方法对象的成员?
访问成员属性: 变量名.属性名
成员方法 : 变量名.方法();
匿名对象
没有任何引用类型变量指向的对象就称为匿名对象
用法:new 类名();
1、匿名对象一般都是用来作为实参传递
2、用来访问对象的成员
好处: 尽早的释放内存空间
注意: 两个匿名对象永远都不可能相等,因为匿名对象是用new创建的,用new创建的对象储存在堆内存中不同的空间地址
构造方法
构造方法用来初始化对象,创建对象时,默认都会调用构造方法
构造方法分为无参构造方法和有参构造方法
语法:
无参构造方法:权限修饰符 类名(){ }
有参构造方法:权限修饰符 类名(数据类型1 变量1,数据类型2 变量2,…){ }
格式要求:
1、构造方法必须与类名相同
2、构造方法不能有返回值类型
3、构造方法允许重载
不同点 | 普通方法 | 构造方法 |
---|---|---|
调用方式 | 普通方法可以直接使用对象名调用 | 构造方法不能通过对象调用,而是JVM自动调用的 |
命名方式 | 普通函数可以任意命名,不推荐使用类名 | 构造方法必须与类同名 |
返回值类型 | 普通方法可以用返回值类型 | 构造方法不能有返回值类型 |
如果想对对象进行统一初始化,无参和有参构造方法,就使用构造代码块
Class Baby{
String name;
String sex;
int age;
{//这就是构造代码块
System.out.println("哭");
}
public Baby(){
System.out.println("无参构造方法");
}
public Baby(String n,String s,int a){
System.out.println("有参构造方法");
name=n;
sex=s;
age=a;
}
}
构造代码块的原理: 本质是JVM在编译时会将构造代码块中的代码拷贝到各个构造方法中,并且是在构造方法的最前面
注意:如果创建一个类,没有创建构造方法,JVM会默认给我们创建一个无参构造方法,如果已经创建了构造方法,那么JVM就不会自动创建无参构造方法
成员变量和局部变量
成员变量:成员变量指的是类范围里定义的变量,也就是所说的属性
局部变量:指的是一个方法内定义的变量
成员变量和局部变量的区别:
1、声明位置不同
成员变量在类之内 方法之外声明
局部变量在方法内部或者形参列表中声明
2、作用域不用
成员变量的作用域在整个类中
局部变量的作用域应该在它所属的花括号中
3、初始化不同
局部变量必须手动初始化才能使用
成员变量会自动初始化
4、存储位置不同
局部变量都是存储在栈内存中
非静态的成员变量都是存储在堆内存中
5、生命周期不一样
局部变量从声明时存在于内存中,用完立即消失
成员变量在创建对象时存在于内存中,用完不会立即消失,而是等待垃圾回收器回收