欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > Java面向对象编程基础

Java面向对象编程基础

2025/2/1 9:14:35 来源:https://blog.csdn.net/YZL40514131/article/details/142912990  浏览:    关键词:Java面向对象编程基础

在这里插入图片描述


Java面向对象编程基础

  • 一、面向对象完成具体功能的操作的三步流程
  • 二、对象在内存中的分配
  • 三、类的成员之一:属性
    • 1.变量的分类:
    • 2.成员变量与局部变量
    • 3.案例
    • 4.案例
  • 四、方法
    • 1 声明举例
    • 2 方法声明的格式
      • a、权限修饰符
      • b、返回值类型
      • c、方法名
      • d、形参列表
    • 3 案例
  • 五、方法的重载
    • 1、定义
    • 2、如何判断两个方法是相同的呢?
  • 六、可变个数形参的方法
    • 1、使用场景
  • 七、方法的值传递机制

一、面向对象完成具体功能的操作的三步流程

步骤1:创建类,并设计类的内部成员(属性、方法)
步骤2:创建类的对象。比如:Phone p1=new Phone();
步骤3:通过对象,调用其内部声明的属性或方法,完成相关的功能

二、对象在内存中的分配

创建类的一个对象给对象赋值
在这里插入图片描述
创建类的2个对象给对象赋值
在这里插入图片描述

在这里插入图片描述

创建类的多个对象时:每个对象在堆空间中有一个对象实体。每个对象实体中保存着一份类的属性。
如果修改某一个对象的某属性值时,不会影响其他对象此属性的值。

强调:
Person p1 = new Person();
Person p3 = p1;
说明:此时p1,p3两个变量指向了堆空间中的同一个对象实体(p1,p3保存的地址值相同)。如果通过其中某一个对象修改属性时,会导致另一个对象的属性值改变。

三、类的成员之一:属性

1.变量的分类:

角度一:按照数据类型来分:基本数据类型(8种)、引用数据类型(数组、类、接口、枚举、注解、记录)
角度二:按照变量在类中声明的位置的不同:成员变量(或属性)、局部变量(方法内、方法形参、构造器内、构造器)

2.成员变量与局部变量

相同点:

变量声明的格式相同:数据类型 变量名=变量值
变量都有其有效的作用域。出了作用域,就失效了。
变量必须先声明,后赋值,再使用。

不同点:
a、类中声明的位置的不同:
属性:声明在类内,方法外的变量
局部变量:声明方法、构造器内部的变量

b、在内存中分配的位置不同(难):
属性:随着对象的创建,存储在堆空间中。
局部变量:存储在栈空间中

c、生命周期:
属性:随着对象的创建而创建,随着对象的消亡而消亡。
局部变量:随着方法对应的栈帧入栈,局部变量会在栈中分配;随着方法对应的栈帧出栈,局部变量消亡。

d、是否可以有权限修饰符进行修饰:
都有哪些权限修饰符:public、protected、缺省、private。(用于表明所修饰的结构可调用的范围的大小)
属性,是可以使用权限修饰符进行修饰的。暂时还未讲封装性,所以大家先不用写任何权限符。
而局部变量,不能使用任何权限修饰符进行修饰的。

e、是否有默认值(重点):
属性:都有默认初始化值;意味着没有给属性进行显示初始化值,则会有默认初始化值
局部变量:都没有默认初始化值。意味着,在使用局部变量之前,必须显示的赋值,否则报错。

注意:对于方法的形参而言,在调用方法时给形式参数赋值。

3.案例

声明员工类Employee,包含属性:编号id、姓名name、年龄age、薪资salary。
声明Employeellst测试类,并在main方法中,创建2个员工对象,并为属性赋值,并打印两个员工的信息。

package com;public class Exec_Employee {int id;  //编号String name;  //姓名int age;  //年龄double salary;  //工资
}
package com;public class Exec_EmployeeTest {public static void main(String[] args) {Exec_Employee e1 = new Exec_Employee();Exec_Employee e2 = new Exec_Employee();e1.id = 1;e2.id = 2;e1.age = 18;e2.age = 20;e1.name = "jimmy";e2.name = "jimmy1";e1.salary = 30000.98;e2.salary = 40000.98;System.out.println("员工编号为:" + e1.id + "工资为:" + e1.salary);System.out.println("员工编号为:" + e2.id + "工资为:" + e2.salary);}
}

员工编号为:1工资为:30000.98
员工编号为:2工资为:40000.98

4.案例

package com.exec2;/*** package:com.exec2** @Author jimmy-yan* @Create 2024/10/14 14:05*/
public class Mydate {String year;String month;String day;
}
package com.exec2;/*** package:com.exec2** @Author jimmy-yan* @Create 2024/10/14 14:04*/
public class Employee {int id;String name;Mydate brithday; //todo 生日}
package com.exec2;/*** package:com.exec2** @Author jimmy-yan* @Create 2024/10/14 14:08*/
public class EmploayTest {public static void main(String[] args) {Employee e = new Employee();e.id = 1;e.name = "jimmy";//todoe.brithday = new Mydate();e.brithday.year = "2024";e.brithday.month = "08";e.brithday.day = "08";System.out.println("员工信息为:" + e.name + ",生日:" + e.brithday.year + e.brithday.month + e.brithday.day);}
}

员工信息为:jimmy,生日:20240808

四、方法

1 声明举例

public void eat() {
public void play(String hobby) 
public String sleep(int hour) 
public int getAge()

2 方法声明的格式

权限修饰符 [其他修饰符] 返回值类型 方法名(形参列表){方法体
}

a、权限修饰符

四种:private、缺省、protected、public

b、返回值类型

描述当调用完此方法时,是否需要返回一个结果。

  • 无返回值类型:使用void

  • 有返回值类型:需要指明返回的数据类型,可以是基本数据类型,也可以是引用数据类型。

    • 需要在方法内部配合“return”+返回值类型的变量或者常量。
  • 我们在在声明方法时,要不要提供返回值类型呢?具体问题具体分析。

c、方法名

属于标识符。需要满足见名知义

d、形参列表

属于局部变量,可以有多个。
分类:无形参列表、有形参列表

3 案例

创建Person类的对象,设置该对象的name、age和gender属性,
调用study方法,输出字符串"studying";
调用showAge()方法,返回age值;
调用addAge(int addAge)方法给对象的age属性值增加addAge岁。比如:2岁。

package com.method.exec1;/*** package:com.method.exec1** @Author jimmy-yan* @Create 2024/10/14 16:27*/public class Exec1 {String name;int age;char gender;public void study() {System.out.println("sudying");}public int showAge() {return age;}public void addAge(int addAge) {age += addAge;System.out.println(age);}}
package com.method.exec1;/*** package:com.method.exec1** @Author jimmy-yan* @Create 2024/10/14 16:32*/
public class Exec1Test {public static void main(String[] args) {Exec1 e = new Exec1();e.study();System.out.println(e.showAge());e.addAge(5);}
}

五、方法的重载

1、定义

在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。满足这样特征的多个方法,彼此之间构成方法的重载。

总结为:“两同一不同”
两同:同一个类、相同的方法名
一不同:参数列表不同。①参数个数不同②参数类型不同
注意:方法的重载与形参的名、权限修饰符、返回值类型都没有关系。

2、如何判断两个方法是相同的呢?

方法名相同,且形参列表相同。(形参列表相同指的是参数个数和类型都相同。
要求:在一个类中,允许存在多个相同名字的方法,只要他们的形参列表不同即可。

package com.method_more;/*** package:com.method_more** @Author jimmy-yan* @Create 2024/10/14 17:25*/
public class OverloadTest {public static void main(String[] args) {}public void add(int i, int j, int k) {}public void add(String s1, String s2) {}public void add(int i, String s) {}public void add(String s, int i) {}
}

在这里插入图片描述

在这里插入图片描述

六、可变个数形参的方法

1、使用场景

在调用方法时,可能会出现方法形参的类型是确定的,但是参数的个数不确定。此时,我们就可以使用可变个数形参的方法。

格式 : (参数类型 … 参数名)

a、可变个数形参的方法在调用时,针对于可变的形参赋的实参的个数可以为:0个、1个或多个。
b、可变个数形参的方法与同一个类中,同名的多个方法之间可以构成重载。
c、特例:可变个数形参的方法与同一个类中方法名相同,且与可变个数形参的类型相同的数组参数不构成重载。
d、可变个数的形参必须声明在形参列表最后
e、可变个数的形参最多再一个方法的形参列表中出现1次

package com.method_more;/*** package:com.method_more** @Author jimmy-yan* @Create 2024/10/14 17:56*/
public class ArgsTest {public static void main(String[] args) {ArgsTest test = new ArgsTest();test.print();test.print(1);test.print(1, 2);test.print(1, 2, 4);}public void print(int... nums) {System.out.println("1111");}public void print(int i) {System.out.println("2222");}public void print(int i, int j) {System.out.println("3333");}
}

七、方法的值传递机制

如果是基本数据类型的变量,则将此变量保存的数据值传递出去。
如果是引用数据类型的变量,则将此变量保存的地址值传递出去。

package com.method_more;/*** package:com.method_more** @Author jimmy-yan* @Create 2024/10/14 18:26*/
public class ValueTransferTest {public static void main(String[] args) {//todo 1、基本数据类型的局部变量int m = 10;int n = m;System.out.println("m=" + m + ",n=" + n); //10 10m++;System.out.println("m=" + m + ",n=" + n);//11 10//todo 2、引用数据类型的局部变量// 2.1数组类型int[] arr1 = new int[]{1, 2, 3, 4, 5};int[] arr2 = arr1;    //todo 传递的是地址值arr2[0] =10;System.out.println(arr1[0]);  //10//todo 2.2、对象类型Order order1 = new Order();order1.orderId=1001;Order order2 = order1;System.out.println(order2.orderId);  //1001}}class Order{int orderId;
}

m=10,n=10
m=11,n=10
10
1001

规则:实参给形参赋值的过程
如果形参是基本数据类型的变量,则将实参保存的数据值赋给形参。
如果形参是引用数据类型的变量,则将实参保存的地址值赋给形参。

package com.method_more;/*** package:com.method_more** @Author jimmy-yan* @Create 2024/10/14 18:52*/
public class ValueTransferTest1 {int age;public static void main(String[] args) {ValueTransferTest1 test = new ValueTransferTest1();//1、对于基本类型的数据变量int m = 10;test.method1(m);System.out.println("m=" + m); //10}public void method1(int m) {m++;}}

面试题:Java中的参数传递机制是什么?值传递

在这里插入图片描述

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com