Java面向对象 oop
Y:文章内容学习自黑马程序员,根据视频课学习的内容记录并总结,共勉。
创建对象并使用
一、如何设计类
public class 类名{
1.成员变量(代表属性,一般是名词)
2.成员方法(代表行为,一般是动词)
3.构造器
4.代码块
5.内部块
}
示例:
public class Student {
//成员变量
String name;
double score;
//行为(方法)
public void output(){
}
public void test(){
}
}
二、如何得到类的对象
类名 对象名 = new 类名();
Student s = new Student();
三、如何使用对象
访问属性:对象名,成员变量
访问行为:对象名.方法名(...)
四、示例
设计类
public class Student {
String name;
double score;
public void output()
{
System.out.println("学生" + name + "今天到校考试了");
}
public void test()
{
System.out.println(name + "的成绩是:" + score);
}
}
使用类
public class Test1 {
public static void main(String[] args) {
//得到类对象属性
Student c = new Student();
//访问对象
c.name = "一博";
c.score = 278.4;
//访问行为
System.out.println(c.name);
System.out.println(c.score);
c.output();
c.test();
}
}
运行结果
五、定义类的补充注意事项
1、 类名首字母建议大写,且有意义,满足“驼峰模式”。
2 、一个Java文件中可以定义多个class类,但只能一个类是public修饰,且public修饰的类名必须成为代码文件名。(实际开发中建议还是一个文件定义一个class类)。
3、 成员变量的完整定义格式是: 修饰符 数据类型 变量名称 = 初始值 ;一般无需指定初始值,存在默认值。(如 public String name = "小张")
六、Java面向对象案例——购物车
构造器 this
一、构造器作用
定义在类中的,可以用于初始化一个类的对此昂,并返回对象的地址。
二、构造器的格式
修饰符 类名(形参列表){
...
}
示例
public class Car{
//定义成员变量
String name;
double price;
//无参数构造器
public Car(){
...
}![请添加图片描述](https://img-blog.csdnimg.cn/821311890a8e46ef8561341947fde723.png)
//有参数构造器
public Car(String name,double price)
{
//将形参赋值给定义变量
name = name;
price = price;
}
}
三、调用构造器得到对象的格式
类 变量名称 = new 构造器
示例
public class Test1 {
public static void main(String[] args) {
//调用构造器得到对象
Car c = new Car();//使用无参数构造器
c.name = "奔驰";
c.price = 39.8;
System.out.println(c.name);
System.out.println(c.price);
System.out.println("===================");
Car c1 = new Car("宝马",38.5);//使用有参数构造器进行赋值
System.out.println(c1.name);
System.out.println(c1.price);
}
四、构造器的分类与作用
- 无参数构造器(默认存在的): 初始化对象时,成员变量数据均采用默认值。
- 有参数构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值。
五、构造器的注意事项
- 任何类定义出来,默认就自带了无参数的构造器,写不写都有。
- 一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了。
![请添加图片描述](https://img-blog.csdnimg.cn/d5487b48b914484da440d008a1c61f1a.png
六、this关键字
-
this关键字是什么?
出现在构造器和成员方法中,代表当前对象的地址。 -
作用:
可以用于指定访问当前对象的成员变量,成员方法。 -
this关键字在构造器中,方法成员中可以做什么?
可以用于指定访问当前对象的成员。
this.name = name //将形参变量赋值给成员变量
封装
一、什么是封装?
- 告诉我们,如何正确设计对象的属性和方法。
- 解决属性和方法属于哪个对象的问题。
- 原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
二、理解封装思想有什么好处
- 让编程变的很简单,有什么事,找对象,调用方法就行。
- 降低我们的学习成本,可以少学少记。
三、如何进行更好的封装
- 一般会把成员变量使用private隐藏起来,对外就不能直接访问了(只能在本类中访问,其它类中不能访问)。
- 提供public修饰的getter和setter方法暴露其取值和赋值。
四、示例
package oop;
public class test2 {
public static void main(String[] args) {
Student s = new Student();
s.setAge(23);
System.out.println("学生的年纪是:"+s.getAge());
}
}
package oop;
public class Student {
//成员变量使用private修饰,只能在本类中访问
private int age;
//提供成套的getter和setter方法暴露其取值和复制
public void setAge(int age)
{
if(age >= 0 && age <= 200){
this.age = age;
}else {
System.out.println("您的年龄数据有问题!");
}
}
public int getAge() {
return age;
}
}
Javabean
一、JavaBean
- JavaBean也可以成为实体类,其对象可以用于在程序中封装数据。
二、标准JavaBean须满足如下书写要求:
- 成员必须使用private修饰。
- 提供成员变量对应的setXxx() / getXxx方法。
- 必须提供一个无参数构造器;有参数构造器可写可不写。
三、标准JavaBean示例
package oop;
public class User {
//1.成员变量建议使用private私有
private String name;
private double height;
private double salary;
//3.要求提供无参数构造器,有参数构造器可有可无
public User() {
};
//如果有有参数构造器的话,无参数构造器就没有了,必须自己写无参数构造器
public User(String name, double height, double salary)
{
this.name = name;
this.height = height;
this.salary = salary;
}
//2.必须为成员变量提供成套的setter和getter方法
public String getName(String name)
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public double getHeight(double height)
{
return height;
}
public void setHeight(double height)
{
this.height = height;
}
public double getSalary(double salary)
{
return salary;
}
public void setSalary(double salary)
{
this.salary = salary;
}
}
面向对象综合案例——模仿电影信息展示
一、需求
- 使用面向对象编程,模仿电影信息的展示
二、分析
- 一部电影是一部Java对象,需要先设计电影类,再创建电影对象。
- 三部电影对象可以采用数组存储起来。
- 依次便利数组中的每一个电影对象,取出其信息进行展示。
三、示例
设计电影类
package oop;
public class movie {
private String name;
private double score;
private String actor;
public movie(){
}
public movie(String name,double score,String actor)
{
this.name = name;
this.score = score;
this.actor = actor;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setScore(double score)
{
this.score = score;
}
public double getScore()
{
return score;
}
public void setActor(String actor)
{
this.actor = actor;
}
public String getActor()
{
return actor;
}
}
用数组存储并便利输出每一个电影对象
package oop;
public class Test3 {
public static void main(String[] args) {
movie[] movies = new movie[3];
movies[0] = new movie("《长津湖》",9.7,"吴京");
movies[1] = new movie("《我和我的父辈》",9.6," 章子怡");
movies[2] = new movie("《跳水少年》",9.5,"王川");
for(int i = 0; i <= 2; i++)
{
movie m = movies[i];
System.out.println("电影名:"+ m.getName());
System.out.println("评分:"+ m.getScore());
System.out.println("演员:"+ m.getActor());
System.out.println("----------------------------");
}
}
}
结果展示