Java 学习 Day05

一、Java面向对象学习的三条主线

1.Java类及类的成员:属性、方法、构造器;代码块、内部类

2.面向对象的三大特征:封装性、继承性、多态性、(抽象性)

3.其他关键字:this、super、static、final、abstrasct、interface、package、import等

“大处着眼,小处着手”

二、“人把大象装进冰箱”

1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。

(1)把冰箱门打开
(2)抬起大象塞进冰箱
(3)把冰箱门关闭

2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

人{*      打开(冰箱){*            冰箱.开开();*       }* *        抬起(大象){*            大象.进入(冰箱);*         }* *        关闭(冰箱){*            冰箱.闭合();*       }* * }* * * 冰箱{*        开开(){}*         闭合(){}* }* * 大象{*       进入(冰箱){*        }* }

三、面向对象的两个要素

类:对一类事物的描述,是抽象的、概念上的定义

对象:是实际存在的该类事务的每个个体,因而也称为实例(instance)

注: (1)面向对象的程序设计的重点是类的设计
(2)设计类就是设计类的成员

四、设计类的成员

1.属性=成员变量=filed=域、字段

2.方法=成员方法=函数=method

3.创建类的对象=类的实例化=实例化类

4.类和对象的使用(面向对象思想落地的实现)
(1)创建类、设计类的成员
(2)创建类的对象
(3)通过“对象.属性”或“对象.方法”调用对象的结构

如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的),意味着,如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。

package day08;public class PersonTset {public static void main(String[] args) {//2.创建Person类的对象Person p1=new Person();//调用对象的结构:属性、方法//调用属性:“对象.属性”p1.name="Tom";p1.isMale=true;System.out.println(p1.name);System.out.println(p1.isMale);//调用方法p1.eat();p1.sleep();p1.talk("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(p3.age);//10System.out.println(p1.age);//10}}//1.创建类,设计类的成员
class Person{//属性String name;int age = 1;boolean isMale;//方法public void eat() {System.out.println(name+"可以吃饭");}public void sleep() {System.out.println("人可以睡觉");}public void talk(String language) {System.out.println("人可以说话,使用的是:"+language);}
}

五、类中属性的使用

属性(成员变量)VS 局部变量

1.相同点:
(1)定义变量的格式:数据类型 变量名=变量值
(2)先声明,后使用
(3)变量都有其对应的作用域

2.不同点
(1)在类中声明的位置不同
①属性:直接定义在类的一对{}内
②局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
(2)关于权限修饰符的不同
①属性:可以在声明属性时,指明其权限,使用权限修饰符。
常用的权限修饰符:private、public、缺省、protected(封装性)
②局部变量:不可以使用权限修饰符。
(3)默认初始化值得情况
①属性:类的属性,根据其类型,都有默认初始化值。
整型(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0 (或’\u0000’)
布尔型(boolean):false
引用数据类型(类、数组、接口):null

②局部变量:没有默认初始化值。意味着,我们在调用局部变量之前,一定要显式赋值。
特别地:形参在调用时,我们赋值即可。
(4)在内存中加载的位置
①属性:加载到堆空间中(非static)
②局部变量:加载到栈空间

package day08;public class UserTest {public static void main(String[] args) {User u1=new User();System.out.println(u1.age);System.out.println(u1.name);System.out.println(u1.isMale);u1.talk("中文");u1.eat();}
}class User{String name;int age;boolean isMale;public void talk(String laguage) {//language:形参,也是局部变量System.out.println("我们使用"+laguage+"交流");} public void eat() {String food="饼";//局部变量System.out.println("北方人喜欢吃"+food);}}

六、类中方法的声明和使用
1. 方法:描述类应该具有的功能。
比如:Math类:squrt()\random()…
Scanner类:nextXxx()…
Arrays类:sort()\binarySearch()\toString()\equals()…
2. 举例:

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

3、方法的声明:权限修饰符 返回值类型 方法名(形参列表){
方法体
}

注意:static,final,abstract来修饰的方法后面再讨论。

4、说明:
(1)关于权限修饰符:默认方法的权限修饰符先都使用public
Java规定的4种权限修饰符:private、public、缺省、protected -->封装性再细说
(2)返回值类型:有返回值 VS 无返回值
①如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中需要用return关键字来返回指定类型的变量或常量:“return 数据”。
如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法不需要使用return,但是如果使用的话,只能“return;”表示结束此方法的意思。

②我们定义的方法该不该有返回值?
a.题目要求
b.凭经验:具体问题具体分析

(3)方法名:属于标识符,遵循标识符的规则和规范,“见名知意”

(4)形参列表:方法可以声明0个、1个、或多个形参。
①格式:数据类型1 形参1,数据类型2 形参2,…

②我们定义方法时,该不该定义形参?
a.题目要求
b.凭经验:具体问题具体分析

(5)方法体:方法功能的体现。

5、retrun关键字的使用
(1)使用范围:使用在方法体中
(2)作用:① 结束方法
② 针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据。
(3)注意点:return关键字后面不可以声明执行语句。

6、方法的使用中,可以调用当前类的属性或方法
特殊的:方法A中又调用了方法A:递归方法。
方法中不可以定义方法。

public class CustomerTest {public static void main(String[] args) {Customer c1=new Customer();c1.eat();c1.sleep(8);c1.age=15;c1.getName();}}class Customer{//属性String name;int age;boolean isMale;//方法public void eat() {System.out.println("客户吃饭");return;//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;}}

七、练习
1.利用面向对象的编程方法,设计类Circle计算圆的面积。

public class CircleTest {public static void main(String[] args) {Circle c1=new Circle();//方式1
//      c1.r=2.5;
//      c1.findArea();//方式2
//      double area=c1.findArea1();
//      System.out.println(area);//方式3double area=c1.findArea(2.5);System.out.println(area);}
}class Circle{//方式1
//  double r;
//  public void findArea() {//      double area = Math.PI*r*r;
//      System.out.println("圆的面积为"+area);
//  }//方式2
//  public double findArea1() {//      double area = Math.PI*r*r;
//      return area;
//  }//方式3public double findArea(double r){double area = Math.PI * r * r;return area;}
}

2.1 编写程序,声明一个method方法,在方法中打印一个108 的型矩形,在main方法中调用该方法。
2.2 修改上一个程序,在method方法中,除打印一个108的型矩形外,再计算该矩形的面积,并将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。

2.3 修改上一个程序,在method方法提供m和n两个参数,方法中打印一个mn的型矩形,并计算该矩形的面积, 将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。

package day08;public class ExerTest {public static void main(String[] args) {ExerTest test=new ExerTest();//2.1
//      test.method();//2.2
//      方式1
//      int area=test.method();
//      System.out.println("面积为"+area);
//      方式2
//      System.out.println(test.method());//2.3int area = test.method(12, 10);System.out.println("面积为:" + area);}//2.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.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;
//  }//2.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;}
}

3.对象数组题目:
定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息

提示:

  1. 生成随机数:Math.random(),返回值类型double;
  2. 四舍五入取整:Math.round(double d),返回值类型long。
public class StudentTest {public static void main(String[] args) {//声明Student类型的数组Student[] stus=new Student[20];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].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){//如果需要换序,交换的是数组的元素: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;}
}

此代码是对StudentTest.java的改进:将操作数组的功能封装到方法中。

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));}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 jzh* @date Mar 14, 2021 9:21:16 PM* @param n* @return*/public void print(Student1[] stus){for(int i = 0;i <stus.length;i++){System.out.println(stus[i].info());}}/*** * * @Description 查找Stduent数组中指定年级的学生信息* @author jzh* @date Mar 14, 2021 9:21:55 PM* @param n* @return*/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 jzh* @date Mar 14, 2021 9:22:21 PM* @param n* @return*/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;}}

Java 学习 Day05相关推荐

  1. JAVA学习day05

    1.方法就是用来完成解决某件事件或者实现某个功能的办法. 2.方法的定义格式: 修饰符 返回值类型 方法的名字 (参数列表....){方法的功能主体循环,判断,变量,比较,运算return ;}修饰符 ...

  2. Java学习day05——方法及其调用重载

    这几天忙于置办年货,准备过年用的东西,只能断断续续的学,接下来估计也是这样了,只能尽量有时间就更一些 01_1方法 1.方法就是用来完成解决某件事情或者实现某个功能的办法 01_2方法的定义格式 方法 ...

  3. Java学习笔记——流程控制

    Java学习笔记--流程控制 Day05 一.用户交互Scanner 1.Scanner对象 我们通过Java工具包java.util.Scanner中的Scanner类来获取用户的输入 基本语法:S ...

  4. Java学习总结与体会,从小菜开始

    文章目录 1.Java学习总结 一.第一章 1.Java技术体系平台 2.Java的重要的特点 3.跨平台性的原理 4.什么是JDK,什么是JRE? 5.编写最简单的java代码(hello,worl ...

  5. Java学习路线图,如何学习Java事半功倍?

    作为一个初学者想掌握Java并不是很容易,Java本身是具有一定难度的,虽然说兴趣这东西可以让我们学习不累,但是有多少人学习是因为兴趣,或者有多少人知道自己的兴趣在哪?所以我很明确的告诉你学习这事本来 ...

  6. Java学习必不可少的网站,快收藏起来

    java技术在IT互联网行业的发展前景一直在提升,越来越多的人都在学习java技术,今天小编来给大家提供一些学习Java的网站集合,希望能够帮助到正在学习java技术的同学. Java学习必不可少的网 ...

  7. 分享五款java学习辅助工具,总有你用的上的~

    想要学好java技术,除了自身的努力,辅助工具也不缺少,辅助工具可以帮助大家在今后的工作中可以提高工作效率,下面小编就来分享五款java学习辅助工具,总有你用的上的~ 五款java学习辅助工具: 1. ...

  8. Java学习从入门到精通的学习建议

    想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此.如:基础语法.核心类库.面向对象编程.异常.集合.IO流等基础如果学不好,那么后边更深入的语法也不容易学会. ...

  9. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

最新文章

  1. 初创公司为什么要我_在一家大型初创公司担任副总裁之前,我希望知道什么
  2. UVa 11624,两次BFS
  3. Kettle使用_13 表输入并发运行与复制数量
  4. VirtualBox中的网络连接方式详解
  5. 不定宽高的div如何垂直居中
  6. 计划任务,机器码与注册码,Web服务
  7. pandasDataframe模块
  8. UBNT Bullet M2说明书
  9. 微信小程序获取点击事件的值
  10. Maven环境变量配置不成功
  11. Java实现 定义一个名为Rectangle的类表示矩形 求面积周长
  12. ABAP——smartform添加图片
  13. 一键免费部署看板管理应用——Wekan
  14. 分布式事务 解决方案
  15. 微信小程序踩坑记录 ------- canvas 生成带小程序码的微信朋友圈分享图
  16. Windows 安装 JDK 与环境变量配置
  17. 国内优秀的CRM软件公司推荐
  18. layui table 导出excel 兼容IE浏览器
  19. javascript网页设计大作业: HTML期末学生大作业 基于HTML+CSS+JavaScript通用的后台管理系统ui框架模板
  20. 期权分仓系统是什么?期权分仓软件的原理又是什么?

热门文章

  1. 利用WinRAR打包免安装绿色C#程序
  2. BPI-Bit 开发板带有Xtensa 32位LX6双核处理器的嵌入式系统的ESP 32
  3. ADS-B接收机SBS-3支持acars和SDR
  4. Hadoop安全认证(1)
  5. 文字转语音小助手有哪些?分享三款,配音免费还易操作
  6. 清华大学计算机百度云,清华大学《工程热力学》共53讲+精品
  7. 如何恢复Chrome浏览器自动翻译功能
  8. php date('Y-m-d H:i:s',time())获取时间不对问题解决
  9. 将标准 HTML table元素转换为Tabulator表
  10. Vue-非父子组件间的传值