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

相关文章

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五