面向对象基础

面向对象编程(oop):

三大特征:封装、继承、多态

对象在计算机中的执行原理

●Student s1 =new Student();
●每次new Student(),就是在堆内存中开辟一块内存区域代表一个学生对象。
●s1变量里面记住的是学生对象的地址

如何识别引用类型的变量?
Student s1 =new Student();
s1变量中存储的是对象的地址,因此变量s1也称为引用类型的变量。

类与对象的一些注意事项

定义类格式:

1、类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car…
2、类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
3、成员变量本身存在默认值,同学们在定义成员变量时一般来说不需要赋初始值(没有意义)。
4、一个代码文件中,可以写多个class类,但只能一个用public修饰
public修饰的类名必须成为代码文件名
5、对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
6、如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。

this:是一个变量,可放在方法中,来拿到当前对象

this关键字在实际开发中用来解决对象的成员变量与方法内部变量的名称一样时,导致访问冲突问题的

this作用:代表了当前对象的地址,可以访问当前对象的成员变量和成员方法

Student和test中的内容不能写混,Student中写的是方法

构造器

1.

2.构造器在哪里调用,我们常用它来干嘛?
(1)对象创建时,我们可以指定对象去调用哪个构造器执行。
(2)构造器常用于完成对象初始化(常见的应用场景是完成对象的成员变量的初始化赋值)
3.构造器在使用时,有哪2个注意事项?
(1)类在设计时,如果不写构造器,java会为类自动生成一个无参构造器的
(2)一旦定义了有参构造器,Java就不会帮我们的类生成无参构造器了,此时就建议自己手写一个无参构造器出来了

封装

设计规范:合理隐藏、合理暴露

封装是类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。

代码层面如何控对象的成员公开或隐藏?
公开成员,可以使用public(公开)进行修饰。
隐藏成员,使用private(私有,隐藏)进行修饰。

实体JavaBean(实体类)

特点:仅仅只是一个用来保存数据的Java类,可以用它创建对象,保存某个事物的数据。

实体类有啥应用场景?
实体类对应的是软件开发里现在比较流行的开发方式,数据和数据的业务处理相分离。

实体类:

public class Student {
    private String name;
    private double score;

    public Student() {//无参构造器 右键点Generate,再选constructor,两个都不选,点Select None
    }
    public Student(String name, double score) {//有参构造器
        this.name = name;
        this.score = score;
    }//右键点Generate,再选constructor,然后两个都选,做事按shift,右手选择

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {//Generate中的Getter and Setter
        this.score = score;
    }
//封装特性:外部不能直接访问,把属性隐藏起来
}

操作类

public class StudentOperateor {
    private Student student;
    public StudentOperateor(Student student) {
        this.student = student;
    }public void printPass(){
        if(student.getScore()>=60){
            System.out.println(student.getName()+"学生成绩及格");
        }else{
            System.out.println(student.getName()+"学生成绩不及格");
        }
    }
}
 

测试类:

public class Test {
    public static void main(String[] args) {
        Student s1 = new Student();//设计对象
        s1.setName("lily");
        s1.setScore(99);
        System.out.println(s1.getName());
        System.out.println(s1.getScore());
        StudentOperateor operateor=new StudentOperateor(s1);
        operateor.printPass();

    }
}
 

案例

-实体类:(1.成员变量都私有,并提供get,set方法 2.有一个公共的无参构造器)

public class Movie {
    private int id;
    private String name;
    private String director;
    private double score;
    private double price;
    private String actor;
    private String info;

    public Movie() {
    }

    public Movie(int id, String name, String director, double score, double price, String actor, String info) {
        this.id = id;
        this.name = name;
        this.director = director;
        this.score = score;
        this.price = price;
        this.actor = actor;
        this.info = info;
    }

    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 String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    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;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}

操作类:

public class MovieOperator {
    private Movie[] movies;
    public MovieOperator(Movie[] movies) {
        this.movies = movies;
    }
    public void printAllMovies(){
        System.out.println("All movies:");
        for (int i = 0; i < movies.length; i++) {
            Movie m=movies[i];
            System.out.println("编号:"+m.getId());
            System.out.println("名称:"+m.getName());
            System.out.println("价格:"+m.getPrice());

        }
    }public void SearchMovieById(int id){
        for (int i = 0; i < movies.length; i++) {
            Movie m=movies[i];
            if(m.getId()==id){
                System.out.println("该电影详情如下:");
                System.out.println("编号:"+m.getId());
                System.out.println("名称:"+m.getName());
                System.out.println("价格:"+m.getPrice());
                System.out.println("得分:"+m.getScore());
                System.out.println("导演:"+m.getDirector());
                System.out.println("主演:"+m.getActor());
                System.out.println("其他信息:"+m.getInfo());
                return;
            }
        }
        System.out.println("没有该电影信息");
    }

}
 

测试类:

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Movie[] movies = new Movie[2];
        movies[0]=new Movie(1,"水木桥","徐克",9.8,38.9,"吴京","12万人想看");
        movies[1]=new Movie(2,"出拳吧","唐晓白",7.8,39,"田雨","3.5万人想看");
        MovieOperator operator=new MovieOperator(movies);
        operator.printAllMovies();
        operator.SearchMovieById(2);
        while (true) {
            System.out.println("=====电影信息系统=====");
            System.out.println("1.查询全部电影信息");
            System.out.println("2.根据id查询某个电影的详细信息展示");
            System.out.println("请输入操作命令");
            Scanner sc=new Scanner(System.in);
            int commend=sc.nextInt();
            switch(commend){
                case 1:
                    operator.printAllMovies();
                    break;
                    case 2:
                        System.out.println("请输入查询电影的id:");
                       int id=sc.nextInt();
                        operator.SearchMovieById(id);
                        break;
                default:
                    System.out.println("你输入的命令有问题");
            }
        }

    }
}

 

成员变量和局部变量的区别

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值