一、面向对象和面向过程
面向对象:以对象为单位,通过调度组合不同的对象来完成某一个功能。
面向过程:以步骤为单位,一步一步完成某一个具体的功能。
二、类
1、类的定义
class 类名{
//在类中定义属性、方法
}
class student{
String stuId="1234556789";
int stuAge=20;//属性
public void studing(){//方法
System.out.println("活到老,学到老!");
}
}
2、类的引用
public static void main(String[] args) {
Student stu=null;//声明一个类的变量
stu=new Student();//创建类的对象
stu.stuAge=20;//调用类的属性
stu.studing();//调用类的方法
}
三、对象
1、匿名对象
//只能使用一次,使用后该对象就会被释放
new Student().studing();
2、释放对象
stu=null;
stu.studing();//报错,空指针
3、对象内存分析
1、栈内存存储对象的地址,堆内存存储对象的属性。
2、若对对象进行赋值stu2=stu1(相同类型才可以赋值),则堆内存只开辟一个空间,栈内存的stu2、stu1地址相同,且同时指向堆内存的同一个空间。
当堆中的对象未被引用变量指向时,会被JVM中的GC程序认为是垃圾对象,从而内存会被回收。
3、将对象赋值之后,stu2和stu1指向同一个地址,则任意一个对象更改属性,另一个对象也更改。
四、封装
1、封装的概念
隐藏实现细节,仅对外提供访问接口。
2、封装的类型
属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装等。
3、封装的好处
模块化、信息隐藏、代码重用、插件化易于调试、具有安全性
4、封装的缺点
会影响执行效率。
5、访问权限修饰符
public-公有,可以被所有的类访问
private-私有,只能在本类中访问,若想在外部访问,需要提供公有的方法进行访问。
通常设值属性都用private进行封装,以保护属性的安全。
public class Test04 {
public static void main(String[] args) {
Person p1=new Person();
p1.setName("小明");
p1.getName();
}
}
class Person{
private String name;
//对外提供一个为name设值的方法
public void setName(String name){
this.name=name;//this表示就近,访问形参的name
}
//对外提供一个获取name值的方法
public String getName(){
return name;
}
}
6、成员变量和局部变量
在类中的位置不同:
成员变量:在类中定义
局部变量:在方法中定义
在内存中的位置不同:
成员变量:在堆内存(属于对象,对象在堆内存)
局部变量:在栈内存(属于方法,方法运行时进栈,运行结束出栈)
生命周期不同:
成员变量:随着对象的创建而创建,随着对象的销毁而销毁
局部变量:随着方法的调用存在
初始化值不同
成员变量:有默认的初始化值,引用类型默认null
局部变量:没有默认的初始化值,必须定义赋值,然后才能使用
成员变量和局部变量名称可以相同,但是要注意用this关键字区分。