java学习笔记 OOP

java面向对象

思维:1.程序大众化

2.目标

3.不强调过程

明确目标

规划,计划-----设计它

当你执行完计划的时候-----达到目标

opp:站在更高层次看待事物

1.第一个狗系统

package com.alibaba.bean;

public class Dogs {
    //狗名字
    public String name;
    //狗种类
    public String variety;
    //狗年龄
    public  int age;
    //狗食物
    public   String food;
    public  void eat(){
        System.out.println("狗吃饭");
    }
    public void sleep(){
        System.out.println("狗睡觉");
    }

}

调用上述代码

import com.alibaba.bean.Dogs;

public class ApplicationRun {
    public static void main(String[] args) {
        //张大爷你先注册试一试
        Dogs zhangDog = new Dogs();
        zhangDog.name = "Jerry";
        zhangDog.variety = "拉布拉多";
        zhangDog.age = 2;
        zhangDog.food = "馒头";
        zhangDog.sleep();
        //王阿姨你也注册试试
        Dogs wangDog = new Dogs();
        wangDog.name = "Tom";
        wangDog.variety = "藏獒";
        wangDog.age = 3;
        wangDog.food = "槟榔";

        System.out.println("张大爷家狗的名字:" + zhangDog.name);
        System.out.println("王阿姨家狗吃的什么:" + wangDog.food);
    }
}
//狗睡觉
//张大爷家狗的名字:Jerry
//王阿姨家狗吃的什么:槟榔

2.成员变量,行为,类和this

package com.alibaba.bean;

//类当中的变量和方法都总称为:属性(共性,特性)
public class Dogs {
    //成员变量:它们构成了类,所以这样命名
    //它们是类的重要组成部分
    //狗名字
    public String name;
    //狗种类
    public String variety;
    //狗年龄
    public  int age;
    //狗食物
    public   String food;
    //一个动作,这些方法(函数)在类当中,我们有很好听的名字--行为
    public  void eat(){
        System.out.println(this.name + "在吃饭");
    }
    public void sleep(){
        System.out.println(this.name + "在睡觉");
    }

}

调用
import com.alibaba.bean.Dogs;

public class ApplicationRun {
    public static void main(String[] args) {
        //张大爷你先注册试一试

        //对象————实例
        //实例:显示生活的一个东西,对抽象的对象进行表示出来的产物。
        //实例是一个真是存在的东西,是唯一的
        //实实在在的例子,证明
        Dogs zhangDog = new Dogs();
        zhangDog.name = "Jerry";
        zhangDog.variety = "拉布拉多";
        zhangDog.age = 2;
        zhangDog.food = "馒头";

        //王阿姨你也注册试试
        Dogs wangDog = new Dogs();
        wangDog.name = "Tom";
        wangDog.variety = "藏獒";
        wangDog.age = 3;
        wangDog.food = "槟榔";

        System.out.println("张大爷家狗的名字:" + zhangDog.name);
        System.out.println("王阿姨家狗吃的什么:" + wangDog.food);
        //张大爷家的狗睡觉;
        zhangDog.sleep();
        //王阿姨家的狗吃饭
        wangDog.eat(); 
    }
}

3.注销账户和null指针异常

import com.alibaba.bean.Dogs;

public class ApplicationRun {
    public static void main(String[] args) {
        //张大爷你先注册试一试
        Dogs zhangDog = new Dogs();
        zhangDog.name = "Jerry";
        zhangDog.variety = "拉布拉多";
        zhangDog.age = 2;

        //张大爷不想用了
        //注销账户
        zhangDog = null;

        //null指针异常
        //已经注销的账号,还想要输出有关他的实例就会报错
        System.out.println("zhangDog name = " + zhangDog.name);
    }
}

4.opp封装

package com.alibaba.bean;

import jdk.nashorn.internal.objects.annotations.Getter;
import jdk.nashorn.internal.objects.annotations.Setter;


//我们把成员变量做的安全,使用private 代替public 成员变量的特性,我们另外提供getter and setter ,这种方式叫 oop---封装
public class Dogs {

     /*public 公共的,公有的————用户可以为所欲为
    支付宝余额
    public class aliPay {
        public String balance;
    }*/

    //private 私人的

    // 狗名字
    private String name;
    //狗种类
    private String variety;
    //狗年龄
    private  int age;
    //狗食物
    private   String food;

    //我们要给用户部分权限,能设置,能修改但是不能瞎改
    // 快捷键 alt+insert 自动创建get和set函数


    public String getName() {
        return name;
    }

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

    public String getVariety() {
        return variety;
    }

    public void setVariety(String variety) {
        this.variety = variety;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public  void eat(){
        System.out.println(this.name + "在吃饭");
    }
    public void sleep(){
        System.out.println(this.name + "在睡觉");
    }

}


///Application.java

//调用
import com.alibaba.bean.Dogs;

public class ApplicationRun {
    public static void main(String[] args) {
        Dogs zhangDog = new Dogs();
        zhangDog.setName("jrray");
        zhangDog.setAge(2);
        zhangDog.setVariety("拉布拉多");

        /*如果支付宝余额是公共的可想而知会出现什么问题
          在我们编程中也是如此
        aliPay ppt = new Dogs();
        ppt.balance = "99999999999999";*/

        System.out.println(zhangDog.getName());
        System.out.println(zhangDog.getAge());
        System.out.println(zhangDog.getVariety());


    }
}

5.jar导入和lombok

利用lombok 的 jar包 封装时只需要在类之前使用@Getter
@Setter两句函数就可以实现输出的调用

如果有特殊的输出条件可另起写

jar导入利用:

1.从Maven官网上下载lombok jar包

在ldea项目上右键--> new --> Directory --> name:jar --> 将下载的lombok包导入

2.jar --> lombok包 右键 --> Add as Library -->level :Project Library

                                                                   --> Add to module: 本项目名称

3.Build --> Rebuild Project

package com.alibaba.bean;


import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Dogs {


    // 狗名字
    private String name;
    //狗种类
    private String variety;
    //狗年龄
    private int age;
    //狗食物
    private String food;

    //我们要给用户部分权限,能设置,能修改但是不能瞎改
    // 快捷键 alt+insert 自动创建get和set函数

    //特殊的拿过来单独写————方法的重写
    public void setAge(int age) {
        if(age < 0 || age > 30){
            System.out.println("你输入的数据不合法,以默认清零");
            this.age = 0;
        } else{
            this.age = age;
        }
    }

    public void eat() {
        System.out.println(this.name + "在吃饭");
    }

    public void sleep() {
        System.out.println(this.name + "在睡觉");
    }
}

//调用
import com.alibaba.bean.Dogs;

public class ApplicationRun {
    public static void main(String[] args) {
        Dogs zhangDog = new Dogs();
        zhangDog.setName("jrray");
        zhangDog.setAge(2);
        zhangDog.setVariety("拉布拉多");

        System.out.println(zhangDog.getName());
        System.out.println(zhangDog.getAge());
        System.out.println(zhangDog.getVariety());


    }
}

6.ToString

package com.alibaba.bean;


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Dogs {


    // 狗名字
    private String name;
    //狗种类
    private String variety;
    //狗年龄
    private int age;
    //狗食物
    private String food;

    //我们要给用户部分权限,能设置,能修改但是不能瞎改
    // 快捷键 alt+insert 自动创建get和set函数

    //特殊的拿过来单独写————方法的重写
    public void setAge(int age) {
        if(age < 0 || age > 30){
            System.out.println("你输入的数据不合法,以默认清零");
            this.age = 0;
        } else{
            this.age = age;
        }
    }

    public void eat() {
        System.out.println(this.name + "在吃饭");
    }

    public void sleep() {
        System.out.println(this.name + "在睡觉");
    }

    //跟getter一样可以在最开始前写@。。。。。,后面就不用写具体的函数了
    @Override
    public String toString() {
        return "Dogs{" +
                "name='" + name + '\'' +
                ", variety='" + variety + '\'' +
                ", age=" + age +
                ", food='" + food + '\'' +
                '}';
    }
}


//调用
import com.alibaba.bean.Dogs;

public class ApplicationRun {
    public static void main(String[] args) {
        Dogs zhangDog = new Dogs();
        zhangDog.setName("jrray");
        zhangDog.setAge(2);
        zhangDog.setVariety("拉布拉多");

        //利用toString打印zhangDog这个对象的全部
        System.out.println("zhangDog = " + zhangDog);

    }
}

7.构造方法

package com.alibaba.bean;


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Dogs {


    // 狗名字
    private String name;
    //狗种类
    private String variety;
    //狗年龄
    private int age;
    //狗食物
    private String food;

    //构造方法
    //不能加类型


    //默认创建,隐藏的,只要创建,就会存在
    //无参数构造函数(无参构造器)
    public Dogs() {
    }

//    有参的构造函数

    public Dogs(String name, String variety, int age, String food) {
        this.name = name;
        this.variety = variety;
        this.age = age;
        this.food = food;
    }

    public void eat() {
        System.out.println(this.name + "在吃饭");
    }

    public void sleep() {
        System.out.println(this.name + "在睡觉");
    }
}


//

import com.alibaba.bean.Dogs;

public class ApplicationRun {
    public static void main(String[] args) {

        //初始化对象(实例)
        Dogs zhangDog = new Dogs("jerry", "拉布拉多", 2, null);

        System.out.println("zhangDog = " + zhangDog);
    }
}

8.构造方法的重载和this

package com.alibaba.bean;


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Dogs {


    // 狗名字
    private String name;
    //狗种类
    private String variety;
    //狗年龄
    private int age;
    //狗食物
    private String food;

    //构造方法
    //不能加类型


    //默认创建,隐藏的,只要创建,就会存在
    //无参数构造函数(无参构造器)
    public Dogs() {
    }

//    有参的构造函数

    public Dogs(String name, String variety, int age, String food) {
        this.name = name;
        this.variety = variety;
        this.age = age;
        this.food = food;
    }
//构造函数重载,相同类名,参数个数或参数类型不同
    public Dogs(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() {
        System.out.println(this.name + "在吃饭");
    }

    public void sleep() {
        System.out.println(this.name + "在睡觉");
        //在方法中调用方法
        //如果要在睡觉时吃饭
        this.eat(); 
    }
}

9. 静态变量和静态方法

package com.alibaba.bean;


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Dogs {

//NanG 小区名字 静态变量
    public static String plot = "NanG";

    // 狗名字
    private String name;
    //狗种类
    private String variety;
    //狗年龄
    private int age;
    //狗食物
    private String food;

    //构造方法
    //不能加类型


    //默认创建,隐藏的,只要创建,就会存在
    //无参数构造函数(无参构造器)
    public Dogs() {
    }

//    有参的构造函数

    public Dogs(String name, String variety, int age, String food) {
        this.name = name;
        this.variety = variety;
        this.age = age;
        this.food = food;
    }
//构造函数重载,相同类名,参数个数或参数类型不同
    public Dogs(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() {
        System.out.println(this.name + "在吃饭");
    }

    public void sleep() {
        System.out.println(this.name + "在睡觉");
        //在方法中调用方法
        //如果要在睡觉时吃饭
        this.eat();
    }

    //静态方法
    public static void injection() {
        System.out.println("所有狗,月底打针");
    }
}

//

import com.alibaba.bean.Dogs;

public class ApplicationRun {
    public static void main(String[] args) {
        System.out.println("Dogs.plot = " + Dogs.plot);
        Dogs.injection();

    }
}

10.private static

package com.alibaba.bean;


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Dogs {

//NanG 小区名字 静态变量
    //如果用公共类,不安全,应该使用

    //使用private实现小区名字的锁定

//    public static String plot = "NanG";
    private static String plot = "NanG";

    // 狗名字
    private String name;
    //狗种类
    private String variety;
    //狗年龄
    private int age;
    //狗食物
    private String food;

    //构造方法
    //不能加类型


    //默认创建,隐藏的,只要创建,就会存在
    //无参数构造函数(无参构造器)
    public Dogs() {
    }

//    有参的构造函数

    public Dogs(String name, String variety, int age, String food) {
        this.name = name;
        this.variety = variety;
        this.age = age;
        this.food = food;
    }
//构造函数重载,相同类名,参数个数或参数类型不同
    public Dogs(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() {
        System.out.println(this.name + "在吃饭");
    }

    public void sleep() {
        System.out.println(this.name + "在睡觉");
        //在方法中调用方法
        //如果要在睡觉时吃饭
        this.eat();
    }

    //使用静态方法实现小区名字的返回
    public static String getPlotInstance(){
        return plot;
    }
}package com.alibaba.bean;


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Dogs {

//NanG 小区名字 静态变量
    //如果用公共类,不安全,应该使用
//    public static String plot = "NanG";
    private static String plot = "NanG";

    // 狗名字
    private String name;
    //狗种类
    private String variety;
    //狗年龄
    private int age;
    //狗食物
    private String food;

    //构造方法
    //不能加类型


    //默认创建,隐藏的,只要创建,就会存在
    //无参数构造函数(无参构造器)
    public Dogs() {
    }

//    有参的构造函数

    public Dogs(String name, String variety, int age, String food) {
        this.name = name;
        this.variety = variety;
        this.age = age;
        this.food = food;
    }
//构造函数重载,相同类名,参数个数或参数类型不同
    public Dogs(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() {
        System.out.println(this.name + "在吃饭");
    }

    public void sleep() {
        System.out.println(this.name + "在睡觉");
        //在方法中调用方法
        //如果要在睡觉时吃饭
        this.eat();
    }

    //使用静态方法实现小区名字的锁定
    public static String getPlotInstance(){
        return plot;
    }
}

//

import com.alibaba.bean.Dogs;

public class ApplicationRun {
    public static void main(String[] args) {

        //静态变量小区改为 private类时无法利用Dog.plot
//        System.out.println("Dogs.plot = " + Dogs.plot);
        System.out.println("plot = " + Dogs.getPlotInstance());


    }
}

11.static单例模式

package com.alibaba.bean;

public class Earth {

    //static 单例设计模式
    private static Earth earthInstance = new Earth();

    private Earth() {
    }

    public static Earth getEarthInstance() {
        return earthInstance;
    }

    public void hello() {
        System.out.println("hello");
    }
}


//
import com.alibaba.bean.Earth;

public class Application {
    public static void main(String[] args) {
        Earth earthInstance = Earth.getEarthInstance();
        earthInstance.hello();
    }
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

134明目

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值