面向对象编程(一)——类

  • 在我们写的程序有很多的代码的时候,我们可以把程序中的东西进行分类,一个类表示一个类别,通过一个类管理这个类别的所有相关的东西。
  • 通过分类可以让程序变得更加有结构。
  • 在程序中可以使用类(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;
                 }
             }