14、java 面向对象之一:面向过程与面向对象区别、对象的创建与使用、类的成员之一(属性)、类的属性之二(方法)等详解

本文主要是介绍14、java 面向对象之一:面向过程与面向对象区别、对象的创建与使用、类的成员之一(属性)、类的属性之二(方法)等详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

java 面向对象之一:

  • Ⅰ、面向过程与面向对象的区别:
    • 1、面向过程与面向对象描述:
    • 2、面向对象的两个要素:类与对象
  • Ⅱ、对象的创建与使用:
    • 1、面向对象思想:对象的创建与使用
      • 其一、描述:
      • 其二、代码为:
      • 其三、截图为:
  • Ⅲ、类的成员:
    • 1、类中方法的声明和使用:
      • 其一、描述:
      • 其二、代码为:
      • 其三、截图为:
    • 2、同类不同对象间的关系:独立堆空间
      • 其一、描述:
      • 其二、代码为:
        • A、Person.java 与 PersonTest.java 位置:
        • B、Person.java 代码:
        • C、PersonTest.java 代码:
      • 其三、截图为:
    • 3、面向对象编程:设计类 Circle 计算圆面积
      • 其一、描述:
      • 其二、代码为:
      • 其三、截图为:
    • 4、面向对象编程:打印一个10*8 的 * 型矩形
      • 其一、描述:
      • 其二、代码为:
      • 其三、截图为:
    • 5、对象数组编程:随机生成学生信息并按成绩冒泡排序
      • 其一、描述:
      • 其二、代码为:
      • 其三、截图为:
    • 6、对象数组编程:随机生成学生信息并按成绩冒泡排序(改进)
      • 其一、描述:
      • 其二、代码为:
      • 其三、截图为:
  • Ⅳ、小结:

Ⅰ、面向过程与面向对象的区别:

1、面向过程与面向对象描述:

* 一、Java面向对象学习的三条主线:(第4-6章)* * 1.Java类及类的成员:属性、方法、构造器;代码块、内部类* * 2.面向对象的三大特征:封装性、继承性、多态性、(抽象性)* * 3.其它关键字:thissuperstaticfinalabstractinterfacepackageimport* * “大处着眼,小处着手”* * * * * 二、“人把大象装进冰箱”* * 1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。* * ① 把冰箱门打开* ② 抬起大象,塞进冰箱* ② 把冰箱门关闭* * 2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。* *{* 		打开(冰箱){* 			冰箱.开开();* 		}* * 		抬起(大象){* 			大象.进入(冰箱);* 		}* * 		关闭(冰箱){* 			冰箱.闭合();* 		}* * }* * * 冰箱{* 		开开(){}* 		闭合(){}* }* * 大象{* 		进入(冰箱){* 		}* }

2、面向对象的两个要素:类与对象

* 三、面向对象的两个要素:* 类:对一类事物的描述,是抽象的、概念上的定义* 对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)* >面向对象程序设计的重点是类的设计* >设计类,就是设计类的成员。

Ⅱ、对象的创建与使用:

1、面向对象思想:对象的创建与使用

其一、描述:

* 一、设计类,其实就是设计类的成员* *  属性 = 成员变量 = field = 域、字段*  方法 = 成员方法 = 函数 = method* *  创建类的对象 = 类的实例化 = 实例化类* * * * 二、类和对象的使用(面向对象思想落地的实现):*  1.创建类,设计类的成员*  2.创建类的对象*  3.通过“对象.属性”或“对象.方法”调用对象的结构*  *  *  * 三、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)*   意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。*   *     * 四、对象的内存解析

其二、代码为:

package com.atguigu.java;//测试类
public class PersonTest {public static void main(String[] args) {//2.创建Person类的对象Person p1 = new Person();//Scanner scanner = new Scanner(System.in);//3.调用对象的结构:属性、方法//调用属性:“对象.属性”p1.name = "Tom";p1.isMale = true;System.out.println(p1.name);//Tom//调用方法:“对象.方法”p1.eat();//人可以吃饭p1.sleep();//人可以睡觉p1.talk("Chinese");//人可以说话,使用的是:Chinese//*******************************Person p2 = new Person();System.out.println(p2.name);//nullSystem.out.println(p2.isMale);//false//*******************************//将p1变量保存的对象地址值赋给p3,导致p1和p3指向了堆空间中的同一个对象实体。Person p3 = p1;System.out.println(p3.name);//Tomp3.age = 10;System.out.println(p1.age);//10}
}//1.创建类,设计类的成员
class Person{//属性String name;int age = 1;boolean isMale;//方法public void eat(){System.out.println("人可以吃饭");}public void sleep(){System.out.println("人可以睡觉");}public void talk(String language){System.out.println("人可以说话,使用的是:" + language);}}

其三、截图为:

在这里插入图片描述

Ⅲ、类的成员:

1、类中方法的声明和使用:

其一、描述:

* 类中方法的声明和使用* * 方法:描述类应该具有的功能。* 比如:Math类:sqrt()\random() \...*     Scanner类:nextXxx() ...*     Arrays类:sort() \ binarySearch() \ toString() \ equals() \ ...* * * * 1.举例:* public void eat(){}* public void sleep(int hour){}* public String getName(){}* public String getNation(String nation){}* * * * 2. 方法的声明:权限修饰符  返回值类型  方法名(形参列表){* 					方法体* 			  }*   注意:staticfinalabstract 来修饰的方法,后面再讲。*   而返回值类型为 void 表示:调用 eat() 方法时,没有返回值;*   而返回值类型为 String 表示:调用 getName() 方法时,会返回一个数据,且数据是 String 类型的;*   *   *   * 3. 说明:* 		3.1 关于权限修饰符:默认方法的权限修饰符先都使用public* 			Java规定的4种权限修饰符:privatepublic、缺省、protected  -->封装性再细说* * * 		3.2 返回值类型: 有返回值  vs 没有返回值* 			3.2.1 有返回和没有返回值具体的细节? * 				  如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用*                return 关键字来返回指定类型的变量或常量(即:数据):“return 数据”。* 				  如果方法没有返回值,则方法声明时,使用 void 来表示。通常,没有返回值的方法中,就不需要*               使用return.但是,如果使用的话,只能“return;”表示结束此方法的意思。* * 			3.2.2 我们定义方法该不该有返回值?* 				① 看题目要求* 				② 凭经验:具体问题具体分析* * *      3.3 方法名:属于标识符,遵循标识符的规则和规范,“见名知意”*      *      *      3.4 形参列表: 方法可以声明0个,1个,或多个形参。*         3.4.1 格式:数据类型1 形参1,数据类型2 形参2,...*         *         3.4.2 我们定义方法时,该不该定义形参?*         		① 题目要求*         		② 凭经验:具体问题具体分析*      *      *      3.5 方法体:方法功能的体现。 * * * *  4.return关键字的使用:*  	1.使用范围:使用在方法体中*  	2.作用:① 结束方法*            ② 针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据。*      3.注意点:return关键字后面不可以声明执行语句。*      *      *      *  5. 方法的使用中,可以调用当前类的属性或方法*  		特殊的:方法A中又调用了方法A:递归方法(即:调用当前类的方法可以是自己的,也可以是别人的);*          但方法中,不可以定义方法。

其二、代码为:

package com.atguigu.java;public class CustomerTest {public static void main(String[] args) {Customer cust1 = new Customer();cust1.eat();//客户吃饭//测试形参是否需要设置的问题
//		int[] arr = new int[]{3,4,5,2,5};
//		cust1.sort();cust1.sleep(8);//休息了8个小时//客户吃饭}
}//客户类
class Customer{//属性String name;int age;boolean isMale;//方法public void eat(){System.out.println("客户吃饭");return;//结束 eat() 方法的作用;//return后不可以声明表达式
//		System.out.println("hello");}public void sleep(int hour){System.out.println("休息了" + hour + "个小时");eat();
//		sleep(10);}public String getName(){if(age > 18){return name;}else{return "Tom";}}public String getNation(String nation){String info = "我的国籍是:" + nation;return info;}//体会形参是否需要设置的问题
//	public void sort(int[] arr){
//		
//	}
//	public void sort(){
//		int[] arr = new int[]{3,4,5,2,5,63,2,5};
//		//。。。。
//	}public void info(){//错误的
//		public void swim(){
//			
//		}}
}

其三、截图为:

在这里插入图片描述

2、同类不同对象间的关系:独立堆空间

其一、描述:

* 要求:* (1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,* 输出字符串“studying”,调用showAge()方法显示age值,* 调用addAge()方法给对象的age属性值增加2岁。* (2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。

其二、代码为:

A、Person.java 与 PersonTest.java 位置:

在这里插入图片描述

B、Person.java 代码:
package com.atguigu.exer;public class Person {String name;int age;/*** sex:1 表明是男性* sex:0 表明是女性*/int sex;public void study(){System.out.println("studying");}public void showAge(){System.out.println("age:" + age);}public int addAge(int i){age += i;return age;}
}
C、PersonTest.java 代码:
package com.atguigu.exer;public class PersonTest {public static void main(String[] args) {Person p1 = new Person();p1.name = "Tom";p1.age = 18;p1.sex = 1;p1.study();//studyingp1.showAge();//age:18int newAge = p1.addAge(2);System.out.println(p1.name + "的新年龄为:" + newAge);//Tom的新年龄为:20System.out.println(p1.age);//20//*************************Person p2 = new Person();p2.showAge();//age:0p2.addAge(10);p2.showAge();//age:10p1.showAge();//age:20}
}

其三、截图为:

在这里插入图片描述

3、面向对象编程:设计类 Circle 计算圆面积

其一、描述:

* 利用面向对象的编程方法,设计类Circle计算圆的面积。

其二、代码为:

package com.atguigu.exer;public class CircleTest {public static void main(String[] args) {Circle c1 = new Circle();//对应方式一:
//		double area = c1.findArea();
//		System.out.println(area);//0.0c1.radius = 2.1;//对应方式一:
//		double area = c1.findArea();
//		System.out.println(area);////对应方式二:c1.findArea();//面积为:13.854423602330987//错误的调用
//		double area = c1.findArea(3.4);
//		System.out.println(area);}
}//圆
class Circle{//属性double radius;//求圆的面积//方式一:
//	public double findArea(){
//		double area = Math.PI * radius * radius;
//		return area;
//	}//方式二:public void findArea(){double area = Math.PI * radius * radius;System.out.println("面积为:" + area);}//错误情况:
//	public double findArea(double r){
//		double area = 3.14 * r * r;
//		return area;
//	}
//	
}

其三、截图为:

在这里插入图片描述

4、面向对象编程:打印一个10*8 的 * 型矩形

其一、描述:

* 3.1 编写程序,声明一个method方法,在方法中打印一个10*8*型矩形,在main方法中调用该方法。* * 3.2 修改上一个程序,在method方法中,除打印一个10*8*型矩形外,再计算该矩形的面积,* 并将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。* * 3.3 修改上一个程序,在method方法提供m和n两个参数,方法中打印一个m*n的*型矩形,* 并计算该矩形的面积, 将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。

其二、代码为:

package com.atguigu.exer;public class Exer3Test {public static void main(String[] args) {//注意:目前,要先造对象然后再调用 method() 方法,而不是在 main() 方法中,直接调用 method() 方法;Exer3Test test = new Exer3Test();//3.1测试
//		test.method();//输出没问题;	//3.2测试//方式一:
//		int area = test.method();
//		System.out.println("面积为:" + area);//输出没问题 + 面积为:80//方式二:
//		System.out.println(test.method());//输出没问题 + 80//3.3测试int area = test.method(12, 10);System.out.println("面积为:" + area);//输出没问题 + 面积为:120}//3.1 
//	public void method(){
//		for(int i = 0;i < 10;i++){
//			for(int j = 0;j < 8;j++){
//				System.out.print("* ");
//			}
//			System.out.println();
//		}
//	}//3.2 
//	public int method(){
//		for(int i = 0;i < 10;i++){
//			for(int j = 0;j < 8;j++){
//				System.out.print("* ");
//			}
//			System.out.println();
//		}
//		
//		return 10 * 8;
//	}//3.3public int method(int m,int n){for(int i = 0;i < m;i++){for(int j = 0;j < n;j++){System.out.print("* ");}System.out.println();}return m * n;}
}

其三、截图为:

在这里插入图片描述

5、对象数组编程:随机生成学生信息并按成绩冒泡排序

其一、描述:

4. 对象数组题目:定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。
创建20个学生对象,学号为120,年级和成绩都由随机数确定。问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息提示:
1) 生成随机数:Math.random(),返回值类型double;  
2) 四舍五入取整:Math.round(double d),返回值类型long;

其二、代码为:

package com.atguigu.exer;public class StudentTest {public static void main(String[] args) {//		Student s1 = new Student();
//		Student s1 = new Student();
//		Student s1 = new Student();
//		Student s1 = new Student();
//		Student s1 = new Student();
//		Student s1 = new Student();//声明Student类型的数组(即:对象数组)Student[] stus = new Student[20];  //String[] arr = new String[10];for(int i = 0;i < stus.length;i++){//给数组元素赋值stus[i] = new Student();//给Student对象的属性赋值stus[i].number = (i + 1);//年级:[1,6]stus[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);//成绩:[0,100]stus[i].score = (int)(Math.random() * (100 - 0 + 1));}//遍历学生数组for(int i = 0;i <stus.length;i++){
//			System.out.println(stus[i].number + "," + stus[i].state 
//					+ "," + stus[i].score);
//			System.out.println(stus[i]);//输出20个地址值;System.out.println(stus[i].info());//输出二十个学生的学号、年级、成绩信息;}System.out.println("********************");//问题一:打印出3年级(state值为3)的学生信息。for(int i = 0;i <stus.length;i++){if(stus[i].state == 3){System.out.println(stus[i].info());//随机并仅输出三年级学生的学号、年级、成绩信息;}}System.out.println("********************");//问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息for(int i = 0;i < stus.length - 1;i++){for(int j = 0;j < stus.length - 1 - i;j++){if(stus[j].score > stus[j + 1].score){//虽然比的是 stus[j].score 值,但是最终交换的 stus[j] 对象;//如果需要换序,交换的是数组的元素:Student对象!!!Student temp = stus[j];stus[j] = stus[j + 1];stus[j + 1] = temp;}}}//遍历学生数组for(int i = 0;i <stus.length;i++){System.out.println(stus[i].info());//输出成绩从小到大排好的二十个学生的学号、年级、成绩信息;}}
}class Student{int number;//学号int state;//年级int score;//成绩//显示学生信息的方法public String info(){return "学号:" + number + ",年级:" + state + ",成绩:" + score;}}

其三、截图为:

在这里插入图片描述

在这里插入图片描述

6、对象数组编程:随机生成学生信息并按成绩冒泡排序(改进)

其一、描述:

4. 对象数组题目:
定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。
创建20个学生对象,学号为120,年级和成绩都由随机数确定。问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息提示:
1) 生成随机数:Math.random(),返回值类型double;  
2) 四舍五入取整:Math.round(double d),返回值类型long。此代码是对 StudentTest.java 的改进:将操作数组的功能封装到方法中;

其二、代码为:

package com.atguigu.exer;public class StudentTest1 {public static void main(String[] args) {//声明Student类型的数组Student1[] stus = new Student1[20];  for(int i = 0;i < stus.length;i++){//给数组元素赋值stus[i] = new Student1();//给Student对象的属性赋值stus[i].number = (i + 1);//年级:[1,6]stus[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);//成绩:[0,100]stus[i].score = (int)(Math.random() * (100 - 0 + 1));}//一定要造一个实例对象,如:test, 然后根据 test 值来调用各个方法;StudentTest1 test = new StudentTest1();//遍历学生数组test.print(stus);System.out.println("********************");//问题一:打印出3年级(state值为3)的学生信息。test.searchState(stus, 3);System.out.println("********************");//问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息test.sort(stus);//遍历学生数组test.print(stus);}/*** * @Description  遍历Student1[]数组的操作* @author shkstart* @date 2024年8月22日下午5:10:19* @param stus*/public void print(Student1[] stus){for(int i = 0;i <stus.length;i++){System.out.println(stus[i].info());}}/*** * @Description 查找Stduent数组中指定年级的学生信息* @author shkstart* @date 2024年8月22日下午5:08:08* @param stus 要查找的数组* @param state 要找的年级*/public void searchState(Student1[] stus,int state){for(int i = 0;i <stus.length;i++){if(stus[i].state == state){System.out.println(stus[i].info());}}}/*** * @Description 给Student1数组排序* @author shkstart* @date 2024年8月22日下午5:09:46* @param stus*/public void sort(Student1[] stus){for(int i = 0;i < stus.length - 1;i++){for(int j = 0;j < stus.length - 1 - i;j++){if(stus[j].score > stus[j + 1].score){//如果需要换序,交换的是数组的元素:Student对象!!!Student1 temp = stus[j];stus[j] = stus[j + 1];stus[j + 1] = temp;}}}}
}class Student1{int number;//学号int state;//年级int score;//成绩//显示学生信息的方法public String info(){return "学号:" + number + ",年级:" + state + ",成绩:" + score;}}

其三、截图为:

在这里插入图片描述
在这里插入图片描述

Ⅳ、小结:

其一、哪里有不对或不合适的地方,还请大佬们多多指点和交流!
其二、若有转发或引用本文章内容,请注明本博客地址(直接点击下面 url 跳转) https://blog.csdn.net/weixin_43405300,创作不易,且行且珍惜!

这篇关于14、java 面向对象之一:面向过程与面向对象区别、对象的创建与使用、类的成员之一(属性)、类的属性之二(方法)等详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129725

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D