java面向对象例子,java面向对象编程实例

  java面向对象例子,java面向对象编程实例

  00-1010 1-Java面向对象学习的三条主线2-面向过程和面向对象3-面向对象的三个特点4-面向对象分析方法分析问题的思路和步骤5-面向对象思路概述6-类和对象的创建-内存分析7-类中属性的声明和使用(局部变量和成员变量的区别)8-类中方法的声明和使用9-对象数组的使用10-理解“一切都是对象”11-匿名对象12-方法的封装(常用算法的封装

  00-1010 Java类是类的成员:属性方法构造函数(代码块内部类)

  面向对象的三个特点:封装继承多态性(抽象)。

  其他关键词:this supperstatic最终抽象接口等。

  00-1010都是思路,面向对象是相对于面向过程的。

  1-面向过程:强调的是功能行为,以功能为最小单位,考虑如何去做。

  2-面向对象:把函数封装成对象,用函数强调对象,以类/对象为最小单位,考虑谁来做。

  面向对象强调人类在日常思维逻辑中所采用的思维方法和原则的应用,如抽象、分类、继承、聚合、多态等。

  /*人把大象放进冰箱,面对过程:强调功能行为,以功能为最小单位,考虑怎么做。打开冰箱门。抬起大象,放入冰箱。关闭冰箱门。面向对象:将功能封装到对象中,用功能强调对象,以类/对象为最小单位,考虑谁会是人{开(冰箱){冰箱。开门();}举起(大象){大象。进入(冰箱);}关闭(冰箱){冰箱。close();}}冰箱{开门(){}关门(){}}大象{回车(冰箱){}} */

  00-1010封装

  继承(继承)

  多形性(多态性)

  00-1010/* *程序员从面向过程的执行者转变为面向对象的指挥者*用面向对象的分析方法分析问题的思路和步骤:* 1-根据问题的需要,选择问题所针对的现实世界的实体* 2-从实体中找到与解决问题相关的属性和函数,这些属性和函数在概念世界中形成一个类* 3-用计算机语言描述抽象实体,在计算机世界中形成类的定义, 即借助某种编程语言,将类构造成计算机能够识别和处理的数据结构* * 4——将类实例化成计算机世界中的对象,这是计算机世界中解决问题的最终工具*/

  00-10101-类和对象是面向对象的核心概念:

  (1)类是对一类事物的描述,是抽象的,概念上的定义。

  对象是实际存在的这类事物的每一个个体,所以也叫实例。

  在Java世界中,“所有的东西都是对象”

  2代码示例

  /*设计类-实际上是设计类的成员属性=成员变量=字段=字段方法=成员方法=函数=方法=类的实例化=类的实例化和对象的使用(面向对象思想的实现)1-创建类,设计类的成员2-创建类的对象3-调用对象的属性或方法(对象。属性对象。方法)。(非静态)是指如果我们修改一个对象的属性A,不会影响另一个对象的属性A。*///Test类公共类person Test { public static void main(string[]args){//创建Person类Person的对象P1=new Person();//Scanner Scanner=new Scanner(system . in);//调用对象属性:object . property system . out . println(P1 . age);//22 P1 . name= Howie ;p1.isMale=true//调用对象方法:object . method P1 . eat();p1。

  sleep(); p1.talk("chinese"); // ******************* Person p2 = new Person(); System.out.println(p2.name); // null 说明类的初始化默认值为 null Person p3 = p1; // 将p1变量保存的对象空间地址值赋值给p3,导致p1和p3都指向了堆空间的同一个对象实体 System.out.println(p3.name); // howie }}// 创建类,设计类的成员class Person{ // 属性 String name; int age = 22; boolean isMale; // 方法 public void eat(){ System.out.println("人正在吃饭!"); } public void sleep(){ System.out.println("人可以睡觉!"); } public void talk(String language){ System.out.println("人可以说话,使用的是"+language); }}

 

  

6 - 类和对象的创建-内存解析

1-内存解析

 

  

 

  2-对象内存解析

  

 

  

 

  

7 - 类中属性的声明和使用(局部变量与成员变量的区别)

1-属性(成员变量)vs 局部变量* 1-相同点* ①定义变量的格式:数据类型 变量名 = 变量值* ②先声明,后使用* ③变量都有其对应的作用域* 2-不同点* ①在类中声明的位置不同* 属性:直接定义在类的一对{}内* 局部变量:声明在方法内,方法形参,代码块,构造器形参,构造器内部的变量* ②关于权限修饰符的不同* 属性:可以在声明属性时,指定其权限,使用权限修饰符。常用的权限修饰符:private , public , 缺省 , protected* 目前,大家声明属性时,都使用缺省就可以(什么都不加)* 局部变量:不可以使用权限修饰符* ③默认初始化的值* 属性:类的属性,根据其类型,都有默认初始值。* 整型(byte、short、int、long):0* 浮点型(float、double):0.0* 字符型(char):0(或'u00000')* 布尔(boolean):false** 引用数据类型(类、数组、接口):null* 局部变量:没有默认初始化值,意味着我们在调用局部变量之前,一定要显示赋值,特别的,形参调用时赋值即可。* ④在内存中加载的位置* 属性:堆空间(非static)* 局部变量:栈

 

  

public class test1 { public static void main(String[] args) { User u1 = new User(); System.out.println(u1.name); System.out.println(u1.age); System.out.println(u1.isMale); // 调用形参 u1.talk("English"); }}class User{ // 属性(或成员变量) String name; int age; boolean isMale; public void talk(String language) {// 形参,也是局部变量 System.out.println("我们使用"+language+"交流"); } public void eat() { String foot = "米线"; // 在方法中定义的局部变量 System.out.println("云南人喜欢吃:"+foot); }}

⑤内存解析需要注意两点

 

  1-内存结构:栈(局部变量)、堆[new 出来的结构:对象(非 static成员变量)、数组]2-变量:成员变量 vs 局部变量(方法内、方法形参、构造器内、构造器形参、代码块内)

  

 

  

 

  

8 - 类中方法的声明和使用

类中方法的申明和使用

 

  方法:描述类应该具备的功能

  比如 Math类:aqrt()random()...

  Scanner类:nexInt() ...

  Arrays类:sort() binarySearch() toString() equals() ...

  1-举例

  

public void eat() {}public void sleep(int hour) {}public String getName() {} public String getNation(String nation) {}

2-方法的声明

 

  

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

 

  

注意:static final abstract 来修饰的方法,后面在介绍

 

  3-说明

  ①权限修饰符:Java规定的4种权限修饰符:private(私有的) , public , 缺省 , protected

  默认方法的权限修饰符先都使用public

  ②返回类型:有返回值 vs 没有返回值

  1-如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用时return关键字来返回指定类型的变量或常量

  2-如果方法没有返回值,则方法声明时,使用 void来表示。通常没有返回值的方法中,就不需要使用return关键字了

  ③方法名:属于标识符,遵循标识符的规则和规范,见名知意

  ④形参列表:方法可以声明0个,1个,或多个形参...格式:数据类型1 形参1,数据类型2 形参2,...

  ⑤方法体:方法功能的体现

  4-return关键字的使用

  ①使用范围:使用在方法体中

  ②作用:1.结束方法2.针对于有返回值类型的方法,使用 'return 数据'方法返回所要的数据。

  ③注意点:return关键字后面不可以声明执行语句

  5-方法的使用:可以调用当前类的属性或方法

  特殊的:方法A中调用方法A称作 递归方法

  方法中不可以再定义方法

  

public class CustomerTest { public static void main(String[] args) { // TODO Auto-generated method stub }}// 客户类class Customer{ // 属性 String name; int age; boolean isMale; // 方法 public void eat() { System.out.println("客户吃饭"); } public void sleep(int hour) { System.out.println("客户休息了"+hour+"个小时"); } public String getName() { return name; } public String getNation(String nation) { String info = "我的国籍是"+nation; return info; }}

练习题

 

  

/* * 1-编写程序,声明一个method方法,在方法中打印一个10*8的*型矩形,在main方法中调用该方法。 * 2-修改上一个程序,在method方法中,除打印一个10*8的*矩形外形,再计算该矩形的面积,并将其作为方法返回值。 * 在main方法中调用该方法接受返回的面积值打印。 * * 3-修改上一个程序,在method方法提供m和n两个参数,方法中打印一个m*n的*型矩形 */public class Exer3Test { public static void main(String[] args) { Exer3Test test = new Exer3Test(); // 第1题的测试 // test.method(); // 第2题的测试// double s = test.method();// System.out.println("面积为"+s); // 第3题的测试 System.out.println(test.method(12,10)); } // 第1问// public void method(){// for(int i = 0;i < 10;i++){// for(int j = 0;j < 8;j++){// System.out.print("* ");// }// System.out.println();// }// } // 第2问// public double 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问 public int method(int n,int m){ for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++){ System.out.print("* "); } System.out.println(); } return n * m; }}

 

  

9 - 对象数组的使用

/* * 对象数组题目 * 定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。创建20个学生对象,学号1到20 * 年级[1-6]和成绩[0-100]都由随机数确定。 * 问题1:打印出3年级(state值为3)的学生信息 * 问题2:使用冒泡排序按学生成绩排序,并遍历所有学生信息 * * 提示: * ①生成随机数:Math.random(),返回值类型double * ②四舍五入:Math.round(double d),返回值类型long. */public class StudentTest { public static void main(String[] args){ // 声明Student对象数组 Student[] students = new Student[20]; for(int i = 0;i < students.length;i++){ // 给数组元素赋值 students[i] = new Student(); // 给Student对象的属性赋值 students[i].number = i + 1; double value = Math.random(); students[i].state = (int)(value * (6 - 1 + 1) + 1); double v = Math.random(); students[i].score = (int)(v * (100 + 1) + 0); // System.out.print(students[i].score+"t"); } // 遍历学生数组 for(int i = 0;i < students.length;i++){ // System.out.println(students[i].number+","+students[i].state+","+students[i].score); // System.out.println(students[i].showInfo()); // 问题1:打印出3年级(state值为3)的学生信息 if(students[i].state == 3){ // System.out.println(students[i].showInfo()); } } // 问题2:使用 [冒泡排序] 按学生成绩排序,并遍历所有学生信息 for(int i = 0;i < students.length - 1;i++){ for(int j = 0;j < students.length - 1 - i;j++){ if(students[j].score > students[j+1].score){ Student temp = students[j]; students[j] = students[j+1]; students[j+1] = temp; } } } // 遍历 排好序的 学生信息 从最高分打印 for(int i = 0;i < students.length;i++){ System.out.println(students[students.length - i-1].showInfo()); } }}class Student{ int number; // 学号 int state; // 年级 int score; // 成绩 public String showInfo(){ return "学号:"+number+" "+"年级:"+state+" "+"成绩:"+score; }}对象数组使用示例

数组对象内存解析

 

  

 

  

 

  

10 - 理解 "万物皆对象"

/** 1-在Java语言范畴中,我们都将功能,结构等封装到类中,通过类的实例化,来调用具体的功能结构* >Scanner,String* >文件:File* >网络资源:URL* 2-涉及到Java语言与前端HTML、后端的数据库交互时、前后端的结构在Java层面交互时,都体现为类、对象*/

 

  

 

  

11 - 匿名对象

/* * 匿名对象的使用 * 1-理解:我们创建的对象,没有显示的赋给一个变量名,即为匿名对象 * 2-特征:匿名对象只能调用一次 * 3-开发中使用:以下代码示例 */public class PhoneTest { public static void main(String[] args) { // TODO Auto-generated method stub Phone p = new Phone(); // p = null; System.out.println(p); p.sendEmail(); p.playGame(); // 匿名对象 // new Phone().sendEmail(); // new Phone().playGame(); new Phone().price = 199; new Phone().showPrice(); // 0.0 PhoneMall mall = new PhoneMall(); // mall.show(p); // 匿名对象的使用 mall.show(new Phone()); }}class PhoneMall{ public void show(Phone phone) { phone.sendEmail(); phone.playGame(); }}class Phone{ double price; // 价格 public void sendEmail() { System.out.println("发送邮件"); } public void playGame() { System.out.println("打游戏"); } public void showPrice() { System.out.println("手机价格为"+price); }}匿名对象的使用

 

  

12 - 方法的封装(数组常用算法的封装)

注意两个Java文件在同级目录

 

  ①在ArrayUtils.java 文件中 创建类并分装方法

  

public class ArrayUtils { // 求数组最大值 public int getMax(int[] array){ int max = array[0]; for(int i = 1;i < array.length;i++){ if(array[i] > max){ max = array[i]; } } return max; } // 求数组最小值 public int getMin(int[] array){ int min = array[0]; for(int i = 1;i < array.length;i++){ if(min > array[i]){ min = array[i]; } } return min; } // 求数组总和 public int getSum(int[] array){ int sum = 0; for(int i = 0;i < array.length;i++){ sum += array[i]; } return sum; } // 求数组平均值 public double getAvg(int[] array){ return getSum(array) / array.length; } // 反转数组 public void reverseArray(int[] array){ for(int i = 0;i < array.length / 2;i++){ int temp = array[i]; array[i] = array[array.length - i - 1]; array[array.length - i - 1] = temp; } } // 复制数组 public int[] copyArray(int[] array){ int[] newArray = new int[array.length]; for(int i = 0;i < array.length;i++){ newArray[i] = array[i]; } return newArray; } // 数组排序 public void sortArray(int[] array){ /** * 默认从小到大排 */ for(int i = 0;i < array.length - 1;i++){ for(int j = 0;j < array.length - i -1;j++){ if(array[j] > array[j+1]){ int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } } // 遍历数组 public void print(int[] array){ for(int i = 0;i < array.length;i++){ System.out.print(array[i]+"t"); } } // 查找数组指定的元素 public int getIndex(int[] array,int dest){ int head = 0; int end = array.length - 1; // 初始的末索引 boolean isFlag = false; int middle = 0; sortArray(array); while(head <= end){ middle = (head + end) / 2; if(dest == array[middle]){ isFlag = true; break; }else if(dest > array[middle]){ head = middle + 1; }else{ end = middle - 1; } } if(isFlag){ return middle; }else{ return -1; } }}ArrayUtils.java

②在ArrayUtilsTest.java 文件中测试封装好的方法

 

  

public class ArrayUtilsTest { public static void main(String[] args){ ArrayUtils array = new ArrayUtils(); int[] arr = new int[]{1,5,7,9,845,21,30,12,222,56,-30}; // 获取数组最大值 System.out.println(array.getMax(arr)); // 获取数组最小值 System.out.println(array.getMin(arr)); // 数组反转 array.reverseArray(arr); for(int i = 0;i < arr.length;i++){ System.out.print(arr[i]+"t"); } System.out.println(); // 数组复制 int[] arr2 = new int[]{1,2,3}; int[] newArray = array.copyArray(arr2); for(int i = 0;i < newArray.length;i++){ System.out.print(newArray[i]+"t"); } System.out.println(); // 查找元素 int i = array.getIndex(arr2,4); System.out.println(i); // -1 表示没有找到此元素 // 数组排序 int[] array3 = new int[]{1,5,8,77,98,33,0,2}; ArrayUtils a = new ArrayUtils(); System.out.print("排序前:"); a.print(array3); System.out.println(); System.out.print("排序后:"); a.sortArray(array3); a.print(array3); }}ArrayUtilsTest.java

 

  

总结

到此这篇关于Java面向对象类和对象的文章就介绍到这了,更多相关Java面向对象类和对象内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: