面向对象(OOP)

面向对象(OOP)

  • Object-Oriented Programming


还可以结合这篇:(可能会有更新)

https://www.cnblogs.com/fulfill/p/15957699.html

java是一门面向对象的编程语言,Java中,万事万物皆对象;

在linux中,万事万物皆文件;

面向过程:面向过程就是分析出实现某需求需要的步骤,通过一些方法一步一步实现;

面向对象:把某需求按特点或功能来划分这些需求,将存在共性的部分封装成类(类实例化之后才是对象),让对象去解决;

1、成员变量

1.1 声明

String name;  // 数据类型 属性名

1.2 调用

// 1、有实例化对象
Test test = new Test();
// 2、调用成员变量
test.name = "jiang";

2、成员方法

  • 可以理解为JS里的函数

2.1 声明

/*
* public:访问权限修饰符
* void:没有返回值,void方法里也可以有return,终止程序执行
* methodName() ;方法名(参数类型 参数名),
参数可以有多个,用逗号隔开;在声明方法时,形参只在该方法里好使当局部变量,在调用方法时,真正传入方法的参数(实参);参数可以有自动类型提升
* {}:方法体
*
* 标识符的命名规则:
* 1、类名:首字母大写(大驼峰:所有单词的首字母大写)
* 2、属性名、方法名:(小驼峰:除了第一个单词,其他的单词的首字母大写)
* */

public void methodName(){
    // 写操作
}

2.2 调用

// 对象.方法名
test.methodName();
  • 有返回值的方法执行后会得到一个具体的值,这个值可以存起来,用的时候就取,不要就不用变量去接收,开发中大部分方法有返回值;
/*有返回值的方法
boolean : 返回值类型为 boolean 类型

参数可以有自动类型提升
如果把 boolean 换成 double 那么return 可以是int类型的数据 

return:终止方法继续执行;返回方法的返回值

 */
public boolean run(){
    // 执行操作
    return true;
}

// 测试类
Test test = new Test();

boolean run = test.run(); // 接收
// 上面返回的是什么型,就用什么型接收

2.3 在一个方法中调用方法

  • 同一类下的方法:1、实例对象,然后 对象.方法名

​ 2、 直接 方法名() (常用这个)

  • 注意:方法里只能调用方法,不能声明方法

  • 如果一个方法有static,要调用一个非static方法,只能通过创建对象后调用

自己调用自己**(递归),有可能出现StackOverflowError 栈溢出

开发中要不要用递归?要注意啥?

会用!但要注意:

  • 递归一定要有出口

  • 递归次数不宜过多

public int digui(int num) {
    if (num == 1 || num == 0) {
        return num;
    }else {
        return num * digui(num - 1);
    }
}

3、Java面向对象的三(四)大特征

  • 封装

  • 继承

  • 多态

  • 抽象

1.1 封装

  • 成员变量:直接在类里面的变量(全局变量)——> 属性
  • 局部变量:声明在某方法里的变量

一对多:一个对象对应多个属性

更多可以看我的这篇:(可能会有更新)

https://www.cnblogs.com/fulfill/p/15987237.html

1.2 继承

更多可以看我的这篇:(可能会有更新)

https://www.cnblogs.com/fulfill/p/15991849.html

1.3 多态

可以看我的这篇:(可能会有更新)

https://www.cnblogs.com/fulfill/p/16004055.html

4、访问权限修饰符

4.1 public(权限最大)

  • 公有的,只要是public声明的方法,只要在同一工程中都可用
  • 可以使用在属性、方法、类、构造器

4.2 protected

  • 受保护的

  • 可以跨包使用,如果跨包使用,必须是它的子类

  • 只能使用在属性、方法、构造器

4.3 默认的

  • 只有当前包下才可以访问,导包也不行
  • 使用在属性、方法、类、构造器

4.4 private

  • 私有的,只有当前类才能用

  • 使用在属性、方法、构造器

只有public 和 默认的 可以修饰类

5、方法重载(Overload)

可以看我的这篇:(可能会有更新)

https://www.cnblogs.com/fulfill/p/15866563.html

方法不能重名,一旦重名,只要里面的参类型不同,调用时根据传入参数自动执行对应的方法就可以叫做 方法重载

在有多个同名参数的类中,在调用时通过不同参数来调用不同的方法

5.1 要求:

1、方法名相同

2、返回值相同

3、参数类型或个数不同,或者参数顺序不同

注意:与返回值类型无关;与访问权限修饰符无关;与方法体无关

方法重载发生在同一类里!

看参数的类型和个数即可

5.2 优点

  • 调用方法时关心方法名就行

能不能用一个方法,计算多个数相加 ? ?

/*用这一个方法可以实现之前写过的方法重载的功能
* 这一个方法可以实现n(n = 1,2,3……)个数相加,都是同一数据类型
*/

public int sum(int[] arr){
    int re = 0;
    if (arr.length < 2) {
        re = arr[0];
    }else {
        for (int i : arr) {
            re += i;
        }
    }
    return re;
}

能不能不用数组???

简便写法:不定长参数

  • 至多只能有1个不定长参数

  • 不定长参数必须在最后的位置

    public int sum(double d1,int ... arr){}
    
/*
* 不定长(可变)参数 ,本质上就是数组,就是方便程序员的
*/ 

public int sum(int ... arr){
    int re = 0;
    if (arr.length < 2) {
        re = arr[0];
    }else {
        for (int i : arr) {
            re += i;
        }
    }
    return re;
}


// 测试类
Test test = new Test();
test.sum(1,2,3,4); // 就不用new数组啦

那能不能写多个不定长参数??

——> 不可以

6、构造器

image-20220718155214163

6.1 语法:

访问权限修饰符 类名(参数列表){
    
}

6.2 特点:

  • Java在new对象时,会先看对象对应的类有没有构造器,有什么样的构造器

如果没有构造器,不能创建对象

  • 每个类,有一个默认的无参构造器

  • 想要个有参的,就自己写

  • 什么时候调用的构造器 ??在对象被实例化时,调用了构造器

Dog dog = new Dog();
// 类名 对象名 = new 构造器
// 实际上对象是通过构造器创建的
  • 如果一个类中显式地声明了一个构造器,则原来那个默认的无参构造就失效,那么调用的是自己写的构造器(而且你得传参),如果你要用,就把那个无参的自己写出来

  • 构造器也可以发生重载

    public Dog(){}
    public Dog(String str,int …… arr){}
    

其他

  • 数组
int[] arr; // 初始值:null
int[] arr = new int[4];  // 已经初始化了,为[0,0,0,0]
  • 赋值时,除了String 外,其余的引用数据类型都要new
  • void的方法中,能不能有return ? ? ——> 可以,代表方法终止执行
  • 在一个方法中调用另外的方法
  • 同一类下的方法:实例对象,然后 对象.方法名

    ​ 直接 方法名(); (常用这个)

/*
* java.long包下的所有类不需要显式导入
* 调用不同包下的类的对象需要导包(IDEA会帮我们导入)
* */
  • 类与类之间的关系

    image-20220718165903838

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值