面向对象编程(一)——类
- 在我们写的程序有很多的代码的时候,我们可以把程序中的东西进行分类,一个类表示一个类别,通过一个类管理这个类别的所有相关的东西。
- 通过分类可以让程序变得更加有结构。
- 在程序中可以使用类(class)对代码进行分类。
- 当使用类编程的时候,使用创建出来的变量称之为一个对象。这就是传说中的面向对象编程。
面向对象和面向过程的区别
- 面向过程里面没有对象,强调的开发一个功能的步骤和过程。
- 面向对象操作处理的是一个个的对象,详细的每个功能的步骤和过程都封装在了类里面,通过类分类划分模块使程序更加结构化。面向对象更加适合开发大型项目,也更加便于后期的维护。
怎么定义类?
class 类名{
//成员变量(这个类有的属性)
//成员方法(这个类有哪些行为,有哪些功能)
}
怎么声明对象
类名 对象名;//对象名为自定义,且可以有多个类名相同,对象名不同的对象(同一类对象可以有多个)
如何利用类创建对象?
类名 对象名=new 类名();
使用属性、调用行为?
对象名.属性=属性值;//属性值可以是后定义的。也可不写,不写时属性值为默认值
对象名.方法(参数类型 参数);//参数可以有多个,也可以一个都没有
注意: 因为类是引用类型,所以在方法内修改引用类型里面的数据的时候,原引用类型里面的数据也被修改了!
Java中的垃圾回收机制GC(JVM)
因为内存空间是有限的,所以垃圾回收机制是为了检测哪些内存不需要使用,并且把不需要使用的内存释放掉(把这部分内存标记为没有被使用),以提供后续使用。
new出来的对象(成员变量): 当没有任何对象引用这块内存区域时,它会被销毁
在调用方法时申请内存空间的对象(局部变量): 当被调用的方法调用完成之后,它所占用这块内存区域会被销毁。如它所引用的数据未被其他变量所引用,则也会被销毁
private和public访问修饰符的作用和区别
可以修饰成员变量,可以修饰成员方法
区别 | private | public |
使用 | 所有属性私有化,提供getter和setter方法访问 | 所有属性公有化,可在外部调用 |
访问修饰符 private:
- 把不需要外界访问的属性都隐藏起来,如需调用,可提供方法让外界访问
- 优点:
- 让代码结构更加清晰;
- 比较安全(编写代码不容易出错,特别是大项目)
构造方法(用来构造对象的)
- 构造方法在new一个对象时会被调用
- 默认构造方法(只有没有任何构造方法的时候,系统才会提供默认无参的构造方法)
- 格式:
修饰符 类名(参数){}
this关键字
- this代表当前对象
- 因为参数的访问优先级高于成员变量,所以当构造方法中参数名与成员变量名一致时,不加this,将会出现变量名=变量名,而不是成员变量名=变量名。
- 使用this.变量名在构造方法中访问成员变量,以区分参数名与成员变量名一致时访问的是成员变量还是方法参数。
习题一:定义长方形类,含:属性:宽、高(整型);方法:求周长、面积;构造方法3个:
(1)无参——宽、高默认值为1;
(2)1个参数——宽、高均为参数值;
(3)2个参数——宽、高各为参数值。
要求:进行测试。
(1)先定义属性,再根据方法需求调用属性
(2)创建构造方法并调用测试
public class Practice{
public static void main(String[] args){
Rectangle rectangle=new Rectangle();
System.out.println("长方形的周长为:"+rectangle.getPerimeter()+",长方形的面积为:"+rectangle.getArea());
Rectangle rectangle1=new Rectangle(4);
System.out.println("长方形的周长为:"+rectangle1.getPerimeter()+",长方形的面积为:"+rectangle1.getArea());
Rectangle rectangle2=new Rectangle(2,4);
System.out.println("长方形的周长为:"+rectangle2.getPerimeter()+",长方形的面积为:"+rectangle2.getArea());
}
}
class Rectangle{
private int weight;
private int height;
//求周长
public int getPerimeter(){
return 2*(weight+height);
}
//求面积
public int getArea(){
return weight*height;
}
public Rectangle(){
weight=1;
height=1;
}
public Rectangle(int a){
weight=a;
height=a;
}
public Rectangle(int weight,int height){
this.weight=weight;
this.height=height;
}
}