Java面向对象编程

对象

先设计对象的模板(设计图)
创建对象的格式:类名 对象名 = new 类名();
s1.name=“王祖贤”
把数据和对数据的处理(比如打印函数)放到同一个类中。

变量存在栈里,变量指向对象,对象存在堆里,对象有类地址,类存在方法区中

构造器

构造器是一种特殊的方法
没有返回值声明
名称必须是类名,就是构造器

在这里插入图片描述
创建对象时,对象会立即自动调用构造器。该构造器会初始化为0
构造器调用时,我们可以制定对象去调用哪个构造器执行
构造器常用于完成对象初始化,一般会默认赋值为空。而局部变量不会初始化。
类默认自带无参构造器,如果为类定义了无参构造器,类默认的无参数构造器就没有了,此时如果运用无参数构造器,就必须自己手写一个无参数构造器出来,否则会报错。
只有构造器可以调用构造器

this关键字

this就是一个变量,可以用在方法中,来拿到当前对象。
当对象Sudent(对象变量)和方法的形参都有name的时候,编译器会先认为这个name是形参的name

封装

面向对象的三大思想,封装,继承,多态
合理隐藏,合理暴露
比如可以将学生的年龄赋值为负数。
private int age;
类外不可以直接访问了。

类里面使用public(都可以访问)的方法set或者get的方法来赋值。方法可以规定范围,如限定年龄大于0. getAge setAge。现在以及形成设计规范了,要私有成员变量。

javabean(实体类)

是一种特殊类。
类中的成员变量全部private,并提供public修饰的get/setter方法(同上面封装所讲);类需要提供一个无参数构造器,有参数构造器可有可无。
一般不把数据的业务处理交给他,而只存放数据。
如何自动生成成员变量
在这里插入图片描述
右键出现上图点击生成,选择getter和setter
在这里插入图片描述
也可以选择构造函数,来提供有参构造器。

static

可以用来修饰成员变量和成员方法(类中定义的变量和方法)。

修饰成员变量

静态变量(类变量)

有static修饰,属于类,在计算机中只有一份,被类的全部对象共享。
建议用类名访问,因为它被所有对象共享。
应用场景:用户类可以记住自己创建了多少个用户对象。
使用构造器,功能加1(这样每new一次就加一),一般静态变量公开出来便于别人访问。如public static int a;

实例变量(对象的变量)

没有static,属于每个对象的。
只能用对象访问。

在这里插入图片描述

修饰方法

静态方法

有static。静态方法无法访问对象的数据。
行内规范:如果这个方法知识为了做一个功能且不需要直接访问对象的数据,这个方法直接定义成静态方法。如果这个方法是对象的。

应用场景

工具类中的方法都是静态方法,每个方法都是一种功能,以便直接调用
why?因为实例方法要创建对象来调用,此时对象知识为了调用方法,对象占内容,这样会浪费内存。
工具类没有创建对象的需求,建议将工具类的构造器进行私有。这样在创建这个对象的时候会报错

实例方法

如果这个方法是对象的行为,需要访问对象的数据,这个方法要定义成实例方法。

注意事项

静态方法可以直接访问静态成员(变量和方法),不可以访问实例成员。(因为要有一个对象才可以访问)。
实例方法中既可以访问静态成员,也可以访问实例成员。
实例方法中可以出现this关键字,静态方法不可以出现this关键字。

综合项目

package com.itheima.demo;

public class MovieOperator {
    private Movie[] movies;

    public MovieOperator(Movie[] movies) {
            this.movies = movies;
    }
    public void searchMovieById() {

    }
    //打印全部电影信息
    public void printAllMovies() {
        System.out.println("电影编号\t电影名称\t主演\t价格");
        for (int i = 0; i < movies.length; i++) {
            Movie m=movies[i];
            System.out.println(m.getName()+"\t"+m.getActor()+"\t"+m.getPrice()+"\t"+m.getId());
        }
    }
}

package com.itheima.demo;

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

    //定义一个有参数构造器
    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;

public class Test {
    public static void main(String[] args) {
        //1.设计电影类Movie,以便创建电影对象,封装电影数据
        //2.封装系统中的全部电影数据(自己造一些数据)
        Movie[] movies=new Movie[6];
        movies[0]=new Movie(1,"cc",1.1,"ss");
        movies[1]=new Movie(2,"dd",2.2,"tt");
        movies[2]=new Movie(3,"ee",3.3,"uu");
        movies[3]=new Movie(4,"ff",4.4,"vv");
        movies[4]=new Movie(5,"gg",5.5,"ww");
        movies[5]=new Movie(6,"hh",6.6,"xx");

        //3.创建电影操作对象,专门负责电影数据的业务操作
        MovieOperator mo=new MovieOperator(movies);
        mo.printAllMovies();
        mo.searchMovieById();//alt加回车快捷键可以


    }
}

静态代码块

在类里面出现static{//代码块},只需要在项目启动时执行一次,执行时优先于其他代码块,包括构造函数,包括主函数。只要加载类就能运行,不能放到方法体中,不能访问普通变量,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值