JAVA面向对象的基础知识

    技术2025-10-06  13

     1.1  面向过程和面向对象

    宏观上:通过面向对象进行整体设计;   

    微观上:执行和处理数据,仍然是面向过程。

     

    面向过程

    面向对象

    区别

    事物比较简单,可以用线性的思维去解决

    事物比较复杂,使用简单的线性思维无法解决

    共同点

     

    面向过程和面向对象都是解决实际问题的一种思维方式

    二者相辅相成,并不是对立的。解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系、方便我们分析整个系统;具体到微观操作,仍然使用面向过程方式来处理

     

    类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。

    类:我们叫做class。 对象:我们叫做Object,instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。

    英雄联盟、王者荣耀中的类和对象

            英雄就是类,具体的英雄,盖伦、提莫是对象。

                                           

    总结:

    类可以看成一类对象的模板,对象可以看成该类的一个具体实例。类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。

     1.2 定义类和创建对象 

    1   属性(field 成员变量):

         属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。

         在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化

                                                          

    2. 方法

    方法用于定义该类或该类实例的行为特征和功能实现。方法是类和对象行为特征的抽象。

    方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。

    方法的作用:重用代码,封装功能,便于修改

    方法定义格式:

    [修饰符]  方法返回值类型  方法名(形参列表) {

    // n条语句

    }

    总结1:如何创建对象

        Scanner input = new Scanner(System.in);

        Person person1 = new Person();

        new 后面是构造方法

    总结2:如何操作属性:对象名.属性名

      person1.name="zhangsan";

      person1.age = 23;

    总结3:如何调用方法: 对象名.方法名(实参列表)

       person1.eat();

       person1.work();

       person1.rest("宿舍");

    3.内存分配

    栈内存

    stack memory存放局部变量、数组名,没有默认值每调用一个方法会开辟一个栈帧,方法执行完立刻回收该栈帧,后进先出

    堆内存

    heap memory存放真正的数组元素/对象内容,有默认值方法执行完毕后不会立刻释放资源,由垃圾回收器负责回收;程序员不用操心  但时间不确定

    1.3 变量

    类中定义的变量是成员变量,而方法中定义的变量,包括方法的参数,代码块中定义的变量被称为局部变量。两个的区别主要表现在以下几方面:

     

    成员变量

    局部变量

    代码中位置不同

    类中定义的变量

    方法或代码块中定义的变量

    内存中位置不同

    堆内存

    栈内存

    是否有默认值

    没有

    代码作用范围(空间)

    当前类的方法

    当前一个方法或代码块

    作用时间不同

    当前对象从创建到销毁

    定义变量到所属方法或代码块执行完毕

    1.4 构造方法

    对于一个类来说

    一般有三种常见的成员:属性field、方法method、构造器constructor

    这三种成员都可以定义零个或多个。

    声明格式:

    [修饰符] 类名(形参列表){

    //n条语句

    }

    构造方法的4个要点:

    构造方法的方法名必须和类名一致!构造方法通过new关键字调用!!构造方法虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。如果我们没有定义构造方法,则编译器会自动定义一个无参的构造方法。如果已定义则编译器不会自动添加!

    构造方法也是方法,只不过有特殊的作用而已。与普通方法一样,构造方法也可以重载。

    需要注意

     对象的创建完全是由构造方法实现的吗?

        不完全是。构造方法是创建Java对象重要途径,通过new关键字调用构造器时,构造器也确实返回了该类对象,但这个对象并不是完全由构造器负责创建的。创建一个对象分为如下四步:

    1. 分配对象空间,并将对象成员变量初始化为0或空

    2. 执行属性值的显示初始化

    3. 执行构造方法

    4. 返回对象的地址给相关的变量

    雷区

        如果方法构造中形参名与属性名相同时,需要使用this关键字区分属性与形参。

         例如:

                  this.id 表示属性id;id表示形参id

     

    1.5 方法调用

    方法调用是Java开发中的基本操作,方法参数分为基本数据类型和引用数据类型两种,传递参数有着实质的区别。

    public class TestPrimaryArgs { public static void main(String[] args) { //定义两个变量 int num1 = 10; int num2 = 20; //输出交换前两个变量的值 System.out.println("交换前:num1="+num1+",num2="+num2); //交换两个变量的值 swap(num1,num2); //输出交换后两个变量的值 System.out.println("交换后:num1="+num1+",num2="+num2); } public static void swap(int num1,int num2){ int temp; temp = num1; num1 = num2; num2 = temp; System.out.println("交换后1:num1="+num1+",num2="+num2); } }

     

    引用数据类型的方法调用

    public class Point { int x; int y; } public class TestRefArgs { public static void main(String[] args) { //定义两个变量 Point p = new Point(); p.x = 10; p.y = 20; //输出交换前两个变量的值 System.out.println("交换前:p.x="+p.x+",p.y="+p.y); //交换两个变量的值 swap(p); //输出交换后两个变量的值 System.out.println("交换后:p.x="+p.x+",p.y="+p.y); } public static void swap(Point p){ p = new Point(); int temp; temp = p.x; p.x = p.y; p.y = temp; } }

    注意:基本数据类型的参数是值传递,引用数据类型的参数传递是引用(地址),本质上也是值传递。

     

    Processed: 0.011, SQL: 9