Javase 基础入门 —— 03 面向对象编程

本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。

01 什么是对象?

类:类是对象的模板,或者对象的设计图,每new一次类,可以获得一个新对象。

对象:对象是一种特殊的数据结构,也可以理解为一张表。万物皆对象,谁的数据谁存储。

java 复制代码
//类
public class Star{
    String name; // 属性or变量
    int age;
    double height;
    double weight;
}

public static void main(String[] args){
    Star s = new Star; //对象
    s.name = "杨幂";
    s.age = 18;
    s.height = 1.8;
    s.weight = 95;
}

02 案例:面向对象

java 复制代码
package.com.itheima.object;

public class Student{
    String name;
    int cScore;
    int mScore;
    
    //封装:将数据和对数据的处理放到同一个类当中
    public void printAllScore(){
        System.out.println(name + "的总成绩是" + 
                       (cScore + Score));
    }
    
    public void printAverageScore(){
        System.out.println(name + "的平均成绩是" + 
                       (cScore + Score) / 2);
    }
}
java 复制代码
package.com.itheima.object;

public class Test{
    public static void main(String[] args){
    Student s1 = new Student;
    s1.name = "波妞";
    s1.cScore = 100;
    s1.mScore = 100;
    System.out.println(s1.name + "的总成绩是" + 
                       (s1.cScore + s1.Score));
    System.out.println(s1.name + "的平均成绩是" + 
                       (s1.cScore + s1.Score) / 2);
	} 
    
    //s1.printAllScore();
    //s1.printAverageScore();
}

类的基本语法,包括构造器、this、封装、Javabeanstatic

03 构造器

java 复制代码
package.com.itheima.object;

public class Student{
	public Student(String name, int age, char sex){
        this.name = name;
        this.age = age;
        this.sex =sex;
    }
}

04 This 关键字

this是一个变量,可以用在方法中,用来拿到当前对象,解决对象的成员变量局部变量名称一样时,导致访问冲突问题的。

java 复制代码
package.com.itheima.object;

public class Student{
	public void print(){
        System.out.println(this.name);
    }
}

05 封装

面向对象的三大特征:封装、继承、多态

Student.java学生类

java 复制代码
package.com.itheima.object;

public class Student{
    private String name;
    private double chinese;
    private double math;
    private int age;
    
    public void setAge(int age){ 
		this.age = age;
    }
    
    public int getAge(){
        return age;
    }
}

注:目前企业要求成员变量必须全部为私有制。

StudentOperator.java学生操作类

java 复制代码
package.com.itheima.object;

public class StudentOperator{
    private Student s; //记住学生对象 ⭐
    
    public StudentOperator(Student s){ //学生对象传递 ⭐
        this.s = s;
    }
    
    public void printAllScore(){
        System.out.println(s.name + "的总成绩是" + (s.cScore + s.Score));
    }
    
    public void printAverageScore(){
        System.out.println(s.name + "的平均成绩是" + (s.cScore + s.Score) / 2);
    }
}

Test.java测试类

java 复制代码
package.com.itheima.object;

public class Test{
    public static void main(String[] args){
        //数据存取
        Student s1 = new Student("波妞", 100, 100, 8);
        
        //数据操作
        StudentOperator operator = new StudentOperator(s1);
        operator.printAllScore();
        operator.printAverageScore();
    }
}

什么是实体类?

实体类是一种特殊类,需要满足类中的成员变量全部私有,并提供public修饰的getter/setter方法,另外,类中需要提供一个无参构造器,有参构造器可选。

实体类的对象只负责数据存取,而对数据的业务处理 交给其他类的对象来完成,以实现数据和数据业务处理相分离。

06 Static 关键字

static意为静态,可以修饰成员变量、成员方法。

成员变量按照有无static修饰,分为静态变量 (类变量)和实例变量(对象变量)两种。

静态变量(类变量):属于类,始终为一块区域

实例变量(对象变量):属于每个对象

注:如果某个数据只需要一份,且希望能被共享(访问、修改),则该数据可以定义成静态变量。

成员变量按照有无static修饰,分为静态方法和实例方法。

静态方法:属于类

实例方法:属于对象

什么是工具类?

工具类中的方法都是静态方法,实现一个个功能,可以提高代码复用性,调用方便,开发效率高。

注:工具类没有创建对象的可能性,所以建议私有化构造器。

static注意事项:

  • 静态方法中可以直接访问静态成员,不可以直接访问实例成员。
  • 实例方法中既可以直接访问静态成员,也可以直接访问实例成员。
  • 实例方法中可以出现this关键字,静态方法中不可以出现this关键字的。
java 复制代码
package com.itheima.object;

public class Test{
    // 静态变量
    public static int count = 100;
    
    //静态方法
    public static void helloWorld(){
        System.out.println("Hello, world!");
    }
    
    //实例变量
    private String name;
    
    //实例方法
    private void helloJava(){
        System.out.println("Hello, java!");
    }
    
    public static void main(String[] args){
        System.out.println(count);
        helloWorld();  
    }
    
    public void gogogogo(){
        //调用静态成员
        System.out.println(count);
        helloWorld(); 
        
        //调用实例成员
        System.out.println(name);
        helloJava(); 
    }
}

07 案例:电影信息展示

Movie.java

java 复制代码
package movie;

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

MovieOperator.java

java 复制代码
package movie;

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 m = movies[i];
            System.out.println(m.getId() + "\t"
                    + m.getName() + "\t"
                    + m.getPrice() + "\t"
                    + m.getActor());
        }
    }

    public void printSelectMovieById(){
        System.out.println("请输入您要查找的电影id:");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        for(int i=0; i<movies.length; ++i){
            Movie m = movies[i];
            if(m.getId() == n){
                System.out.println(m.getId() + "\t"
                        + m.getName() + "\t"
                        + m.getPrice() + "\t"
                        + m.getActor());
            }
        }
    }
}

Test.java

java 复制代码
package movie;

public class Test {
    public static void main(String[] args) {
        Movie[] movies = new Movie[6]; //万物皆类型

        movies[0] = new Movie(1,"星际穿越", 9.6, "孙二");
        movies[1] = new Movie(2,"蝙蝠侠", 8.7, "张三");
        movies[2] = new Movie(3,"间谍", 8.5, "李四");
        movies[3] = new Movie(4,"天外来客", 9.2, "王五");
        movies[4] = new Movie(5,"AI", 9.0, "赵六");
        movies[5] = new Movie(6,"月球引力", 8.2, "钱七");

        MovieOperator operator = new MovieOperator(movies);
        operator.printAllMovies();
        operator.printSelectMovieById();
    }
}

报错:

解决:

相关推荐
代码小将1 小时前
Leetcode209做题笔记
java·笔记·算法
专注_每天进步一点点1 小时前
idea 启动Springboot项目在编译阶段报错:java: OutOfMemoryError: insufficient memory
java·spring boot·intellij-idea
朗迹 - 张伟1 小时前
UE5 PCG学习笔记
笔记·学习·ue5
dhxhsgrx2 小时前
PYTHON训练营DAY25
java·开发语言·python
寻丶幽风3 小时前
论文阅读笔记——双流网络
论文阅读·笔记·深度学习·视频理解·双流网络
不知几秋3 小时前
数字取证-内存取证(volatility)
java·linux·前端
风逸hhh4 小时前
python打卡day25@浙大疏锦行
开发语言·python
刚入门的大一新生4 小时前
C++初阶-string类的模拟实现与改进
开发语言·c++
chxii6 小时前
5java集合框架
java·开发语言