面向过程:主要针对过程(步骤)解决问题——核心思想:亲力亲为
面向对象:主要针对对象(别人)解决问题(不确定具体的底层实现),是面向过程之上的一种优化方式,其三大特点:继承,封装,多态。
类:具有相同特征(变量)和行为(函数)的事物的统称。
对象和类的关系:对象是类所描述出来的具体的事物。
主 类——程序主要且唯一入口,主要负责程序的运行,不需要描述具体的事物。一般而言,主函数所在的类为主类,其不需要创建对象,可以直接调用(JVM调用)。
实体类——主要负责描述事物,属性(成员变量)和行为(成员函数)。成员函数可以直接调用成员变量。
工具类——一般不会创建对象,通过类调用函数(静态函数)。 如:Math.random()
静态不能直接调用非静态;
非静态可以调用静态。
new 类(); //按照类所描述的内容创建一个具体对象。
public class House{
Double area; //成员变量
String color;
public void isLocation(){ //成员函数
System.out.print("我的面积为:"+area+" ,我的颜色为: "+color);
}
}
public class HouseTest{
public static void main(String[] args){
House h=new House(); //创建对象
System.out.println(h.area);
System.out.println(h.color);
}
}
对象的创建流程:
1.主函数先进栈。
2.执行new House(),在堆内存中开辟一个空间,随机分配地址。
3.在对象空间中创建成员变量的空间,对成员变量进行默认初始化(基本数据类型 整数:0 小数:0.0 字符:0 布尔:false)
(引用数据类型 null)
*成员函数不在对象空间。*
4.在函数栈中创建局部变量,存放该对象在堆内存中的地址。
成员变量防止外界修改+private,此时外界不能修改和访问,访问器则为了外界可以访问,修改器则为了外界可以更改成员变量。
访问器:getter
修改器: setter
this:表示当前对象的引用,区分调用函数相对应的对象。
public class point(){
private double x;
private double y;
public double getDistance(Point p){
return Math.hypot(this.x-p.x;this.y-y); //当前x-传进来x,当前y-传进来y
}
public double getX(){ //访问器
return this.x;
}
public double getY(){
return this.y;
}
public void setX(double x){ //修改器
this.x=x;
}
public void setY(double y){
this.y=y;
}
}
public class Circle(){
private Point center;
//圆和圆之间的距离
public double getDistanse(circle other){
return getDistance(other center); //调用当前类的同级别函数
}
//圆和点之间的距离
public double getDistanse(Point center){
return this.center.getDistance(point); //调用Point类里面的求点和点距离函数
}
public double getCenter(){
return this.getCenter;
}
public void setCenter(Point center){
this.center=center;
}
}
public class CircleTest{
public static void main(String[] args){
Circle c1=new Circle();
Point p1=new Point();
p1.setX(10);
p1.setY(10);
c1.setCenter(p1);
Circle c2=new Circle();
Point p2=new Point();
p2.setX(20);
p2.setY(20);
c2.setCenter(p2);
System.out.println(c1.getDistance(c2));
}
}