当前位置: 首页 > news >正文

Java基础第3天总结(面向对象)

  • 用面向对象的编程方式,存储学生信息,打印总成绩和平均成绩
package com.itheima.object;
//把数据和对数据的处理放到一个类中去
public class Student {String name;double chinese;double math;public void printAllScore(){System.out.println(name + "的总成绩是:" + (chinese + math));}public void printAvgScore(){System.out.println(name + "的平均成绩是:" + ((chinese + math) / 2));}
}
package com.itheima.object;public class Test2 {public static void main(String[] args) {Student s1 = new Student();s1.name = "张三";s1.chinese = 90;s1.math = 80;s1.printAllScore();s1.printAvgScore();}
}
  • 对象是啥?如何得到?

答:对象是一种特殊的数据结构。对象是用类new出来的,有了类就可以创建出对象。

public   class    类名{

        1、变量,用来说明对象可以处理什么数据

        2、方法,描述对象有什么功能,也就是可以对数据进行什么样的处理

        ...

}

类名  对象名 = new  类名( );

万物皆对象,谁得数据谁存储。

  • 类的基本语法--构造器

        没有返回值类型声明,方法名必须与类名相同(这种特殊的方法称为构造器)

public class Student {/*构造器*/public Student(){...}
}
  • 对象创建时,我们可以指定对象去调用哪个构造器执行。
  • 构造器常用于完成对象初始化(常见的应用场景是完成对象的成员变量的初始化赋值)
  • 类默认就自带一个无参构造器
  • 如果为类定义了有参构造器,类默认的无参数构造器就没有了,如果要用无参的,还要手写一个无参的
package com.itheima.object;
//把数据和对数据的处理放到一个类中去
public class Student {String name;int age;char sex;public Student(){}public Student(String n){}public Student(String n,int a,char s){name = n;age = a;sex = s;}
}
package com.itheima.object;public class Test2 {public static void main(String[] args) {Student s1 = new Student();Student s2 = new Student("张三", 18, '男');}
}
  • 类的基本语法--this
  • this就是一个变量,可以用在方法中,用来拿到当前对象;哪个对象调用方法,this就指向哪个对象,也就是拿到哪个对象。
  • this用来解决对象的成员变量与方法内部变量的名称一样时,导致访问冲突问题的。
package com.itheima.object;
//把数据和对数据的处理放到一个类中去
public class Student {String name;public void print(){System.out.println(this);System.out.println(this.name);}public void printHobby(String name){System.out.println(this.name + "喜欢" + name);}}
package com.itheima.object;public class Test2 {public static void main(String[] args) {Student s1 = new Student();s1.name = "张三";s1.print();s1.printHobby("唱歌!");}
}

运行结果:

com.itheima.object.Student@1b6d3586
张三
张三喜欢唱歌!

  • 类的基本语法--封装
package com.itheima.object;
//把数据和对数据的处理放到一个类中去
public class Student {String name;//1、如何隐藏:使用private关键字(私有、隐藏)修饰成员变量,//就只能在本类中被直接访问,其他任何地方不能直接访问private int age;//2、如何暴露(合理暴露):使用public修饰(公开)的get和set方法合理暴露//成员变量的取值和赋值public void setAge(int age) {if (age >= 0 && age <= 120) {this.age = age;} else {System.out.println("你输入的age有误");}}public int getAge() {return age;}
}
package com.itheima.object;public class Test2 {public static void main(String[] args) {Student s1 = new Student();s1.setAge(19);System.out.println(s1.getAge());}
}
  • 合理隐藏,合理暴露。
  • 公开成员,可以使用public(公开)进行修饰。
  • 隐藏成员,使用private(私有,隐藏)进行修饰。
  • 类的基本语法--javabean(实体类)
package com.itheima.object;
//实体类
public class Student {//1、私有成员变量private String name;private double chinese;private double math;//写有参构造器了,就得提供无参的public Student() {}//提供一个有参数构造器(可选)public Student(String name, double chinese, double math) {this.name = name;this.chinese = chinese;this.math = math;}//2、提供公开的getter和setter方法public String getName() {return name;}public void setName(String name) {this.name = name;}public double getChinese() {return chinese;}public void setChinese(double chinese) {this.chinese = chinese;}public double getMath() {return math;}public void setMath(double math) {this.math = math;}
}
package com.itheima.object;public class StudentOperator {private Student s;//用于记住将来要操作的学生对象。public StudentOperator(Student s){this.s = s;}//提供方法:打印学生对象的总成绩public void printTotalScore(){System.out.println(s.getName() + "的总成绩是:" + (s.getChinese() + s.getMath()));}//提供方法:;打印学生的平均成绩public void printAvgScore(){System.out.println(s.getName() + "的平均成绩是:" + (s.getChinese() + s.getMath()) / 2);}
}
package com.itheima.object;public class Test2 {public static void main(String[] args) {//实体类的基本作用:创建它的对象,存取数据(封装数据)Student s = new Student("波仔", 100, 100);//创建一个学生的操作对象专门负责对学生对象的数据进行业务处理。StudentOperator operator = new StudentOperator(s);operator.printTotalScore();operator.printAvgScore();}
}
  • 什么是实体类?有啥特点?
  • 答:成员变量必须私有,且要为他们提供get、set方法(鼠标右键->Generate->Getter and Setter ->按住shift键,点击最后一个,完成全选->点击ok就自动生成了);必须有无参数构造器。 特点:仅仅只是一个用来保存数据的java类,可以用它创建对象,保存某个事物的数据。
  • 实现数据和数据的业务处理相分离。
  • 自动生成有参构造器快捷键:鼠标右键->Generate->Constructor->按住shift键,点击最后一个,完成全选->点击ok就自动生成了
  • 自动生成无参构造器快捷键:鼠标右键->Generate->Constructor->点击Select None就生成了
  • 类的基本语法--static
package com.itheima.staticfield;public class Student {//静态变量:有static修饰,属于类,只加载一份,可以被类和类的全部对象共享访问static String name;//实例变量:没有static修饰,属于对象,每个对象都有一份int age;
}
package com.itheima.staticfield;public class Test {public static void main(String[] args) {//1、类名.静态变量(推荐)Student.name = "袁华";System.out.println(Student.name);//袁华//2、对象名.静态变量(不推荐)Student s1 = new Student();s1.name = "马冬梅";Student s2 = new Student();s2.name = "秋雅";System.out.println(s1.name);//秋雅System.out.println(s2.name);//秋雅System.out.println(Student.name);//秋雅//因为静态变量是所有对象共享的,只有一份,所以只看最后修改成了什么就行//最后name变成了秋雅,所以打印结果都是秋雅//3、对象名.实例变量s1.age = 18;s2.age = 19;System.out.println(s1.age);//18System.out.println(s2.age);//19//实例变量是每个对象单独拥有的,所以打印结果都是单独的//不能用类名.实例变量,因为不知道访问的是哪个对象的//System.out.println(Student.age);报错}
}
  • 静态变量:数据只需要一份,且需要被共享访问和修改
  • 实例变量:每个对象都有一份,数据都是独立的
  • 访问自己类中的类变量,可以省略类名不写
  • 在某个类中访问其他类里的类变量,必须带类名访问


package com.itheima.staticmethod;public class Student {private double score;//静态方法:有static修饰,属于类持有,建议用类名访问,也可以用对象访问public static void printHelloWorld(){System.out.println("hello world");System.out.println("hello world");}//实例方法:无static修饰,属于对象持有,建议用对象访问public void printPass(){System.out.println(score >= 60 ? "通过" : "未通过");}public void setScore(double score){this.score = score;}
}
package com.itheima.staticmethod;public class Test {public static void main(String[] args) {//1、类名.静态方法(推荐)Student.printHelloWorld();//2、对象.静态方法(不推荐)Student s1 = new Student();s1.printHelloWorld();//3.对象名.实例方法//Student.printPass();//报错s1.setScore(59.5);s1.printPass();//规范:如果这个方法只是为了做一个功能且不需要直接访问对象的数据,用静态方法//如果这个方法是对象的行为,需要访问对象的数据,用实例方法}
}
  • 如果这个方法只是为了做一个功能且不需要直接访问对象的数据,用静态方法
  • 如果这个方法是对象的行为,需要访问对象的数据,用实例方法
  • 静态方法可以用来设计工具类
  • 工具类中的方法都是静态方法,每个类方法都是用来完成一个功能的
  • 工具类不用实例方法的原因:需要创建对象来调用,会浪费内存
  • 工具类不需要创建对象,建议将工具类的构造器私有化 private  类名( ) { }
  • 静态方法中可以直接访问静态成员,不可以直接访问实例成员。
  • 实例方法中既可以直接访问静态成员,也可以直接访问实例成员。
  • 实例方法中可以出现this关键字,静态方法中不可以出现this关键字。

小案例:1、展示系统中全部的电影信息

                2、允许用户根据电影编号(id)查询某个电影的信息

                3、使用所学的面向对象编程实现以上两个需求。

package com.itheima.demo;public class Movie {private int id;private String name;private double price;private String actor;public Movie() {}public Movie(int id, String name, double price, String actor) {this.id = id;this.name = name;this.price = price;this.actor = actor;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}
}
package com.itheima.demo;import java.util.Scanner;public class MovieOperator {private Movie[] movies;public MovieOperator(Movie[] movies) {this.movies = movies;}public void printAllMovies() {for (int i = 0; i < movies.length; i++) {Movie movie = movies[i];System.out.println(movie.getName() + " " + movie.getPrice());}}public void searchMovieById() {System.out.println("请输入要查询的编号id:");Scanner sc = new Scanner(System.in);int id = sc.nextInt();for (int i = 0; i < movies.length; i++) {Movie m = movies[i];if (m.getId() == id) {System.out.println(m.getName() + " " + m.getPrice());return;}}System.out.println("没有找到该编号的影片");}
}
package com.itheima.demo;public class Test {public static void main(String[] args) {//1、设计电影类Movie,以便创建电影对象,封装电影数据//2、封装系统中的全部电影数据。(自己造一些数据)Movie[] movies = new Movie[6];movies[0] = new Movie(1, "唐顿庄园", 9.5, "Tim Allen");movies[1] = new Movie(2, "唐顿庄园2", 9.5, "Tim Allen");movies[2] = new Movie(3, "唐顿庄园3", 9.5, "Tim Allen");movies[3] = new Movie(4, "唐顿庄园4", 9.5, "Tim Allen");movies[4] = new Movie(5, "唐顿庄园5", 9.5, "Tim Allen");movies[5] = new Movie(6, "唐顿庄园6", 9.5, "Tim Allen");//3、创建电影操作对象出来,专门负责电影数据的业务操作MovieOperator mo = new MovieOperator(movies);//选中movies后Alt+Enter+Enter会在MovieOperator类中自动添加构造方法mo.printAllMovies();//先选中该方法后Alt+Enter+Enter自动在MovieOperator类中添加printAllMovies方法mo.searchMovieById();//同上}
}

http://www.dtcms.com/a/347958.html

相关文章:

  • Shell Case 条件语句详解
  • EP01:【DA】数据分析的概述
  • 01Shell脚本入门:基础命令与变量解析
  • JVM之【类加载系统】
  • 【Qt开发】常用控件(六)
  • Golang云端编程深度指南:架构本质与高阶实践
  • Flink Slot 不足导致任务Pending修复方案
  • 互联网大厂Java面试实录:从Spring到微服务的全面考察
  • 【软件安全】ARM64、x86、32 位与 64 位架构的区别、定义、应用背景
  • 个人搭建小网站教程(云服务器Ubuntu版本)
  • 【数据结构】二叉树的顺序存储、堆的实现及其应用:堆排序与Top-K问题
  • 以国产IoTDB为代表的主流时序数据库架构与性能深度选型评测
  • kanass V1.1.4版本发布,支持Mysql数据库、ubuntu安装与Mantis数据导入
  • Thonny+MicroPython搭建ESP32芯片开发环境
  • 代码性能测试——benchmark库
  • Elasticsearch Ruby 客户端故障排查实战指南
  • AI与SEO关键词协同优化
  • DBeaver连接SQL Server集成认证问题解决方案
  • xxl-job 启动后导致pod内存使用率持续增加
  • 从 Unity UGUI 到 Unreal UMG 的交互与高效实践:UI 事件、坐标系适配与性能优化
  • MATLAB 与 Simulink 联合仿真:控制系统建模与动态性能优化
  • C#_gRPC
  • RabbitMQ--消费端异常处理与 Spring Retry
  • 阿里云拉取dockers镜像
  • 在JavaScript中,比较两个数组是否有相同元素(交集)的常用方法
  • 今日科技热点 | AI加速创新,5G与量子计算引领未来
  • wpf之DockPanel
  • 3D打印机管理后台与RabbitMQ集成的业务场景
  • RabbitMQ面试精讲 Day 29:版本升级与平滑迁移
  • 【图像处理基石】基于 Python 的图像行人删除技术:实现街景无干扰化处理