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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数