今日重点:构造器、方法的重载、不定义参数、成员变量、面向对象
知识点掌握:了解
个人心得: 今天状态不佳,但好在学的东西基本都跟上了,自我调整调整,明天加油!

1. 前言

Java是一门面向对象的编程语言。在Java中,万事万物皆对象(在Linux中,万事万物皆文件)

2. 面向过程和面向对象

  1. 面向过程:面向过程就是分析出实现需求需要的步骤,通过一些方法一步一步实现
  2. 面向对象(行为化):把整个需求按照特点、功能划分,将这些存在共性的部分封装成类(类实例化之后才是对象),让对象去解决问题。更高级的抽象,是对现实世界的映射
举例:
    七夕:你想送你对象一个包
面向对象:找个店,买个包。不管是商家、还是包都是现实中真实存在的事物,我们忽略了这个包是怎么加工的
面向过程:找到原材料,自己缝制,每一个工序都是自己干,这就是面向过程

其实,高级的编程语言,会向着人的思考靠近

3. 对象

String、Scanner 我们在使用Scanner时,从没考虑过Scanner为什么能调用键盘输入
这是别人给我们创建的对象,事实上我们也能自己创建对象,在开发中,基本上我们会大量的创建自己的对象给自己用

我们准备开一个4s店,我们需要车,需要门店。
车:描述信息,描述信息就叫属性,属性从代码的角度来说就是变量
        定义好多的变量:color、width........

但是怎么描述好几个车?
用面向对象的思想,我们将一个汽车的多个属性尝试进行打包,这个过程实际上就是在封装对象

4. 面向对象的三大特征

  1. 继承
  2. 封装 分两个层次 代码层面和思想层面
  3. 多肽

5. 变量

  1. 如果把变量声明在类里,这叫成员变量
  2. 如果把变量声明在某个方法里,这叫局部变量
描述汽车属性的类
public class Car {
    String brand;
    String color;
    double length;
5.1 成员变量—属性
  • 创建对象的过程,类的实例化的过程,对象又叫做类的一个实例

我们创建了一个Car类的对象car1,这个car1就是对象的名。其实这个car1就是个标识符。

  • 对象名的命名规则:小驼峰
  • 创建对象的语法:类名 对象名 = new 类名( );类名 对象名 = new 构造器(类名())
Car car1 = new Car();
Car car2 = new Car();
  • car1和car2都是car类的一个实例(对象)
  • 每一个对象之间都是相互隔离的
  • car是类,只有一份
5.2 成员方法:(JS)里的函数

image-20220718212442447

//定义一个成员方法
public void run(){
	System.out.println();
}

public :访问权限修饰符

void :没有返回值

run( ):方法名(标识符)

{ }:方法体(这个方法要干哪些事)

( ):传参数

  • 参数可以有多个,中间用逗号隔开
  • Java中的传参需要明确数据类型
  • 在声明方法时,括号里的参数:形式参数(形参),可以当做局部变量使用
  • 在调用方法时,形参是在声明处,实参是在调用处

有返回值的方法

boolean:返回值类型,我这个方法经过一系列的运行过后,要得到一个具体的值,返回值,返回值的类型是boolean

返回值用return xxx; 类型要匹配

有返回值的方法在执行后会得到一个具体的值,这个值可以存下来

开发中,大部分的方法都有返回值

return关键字

  1. return关键字终止方法继续执行
  2. 返回方法的返回值
  3. 在void的方法中,能有return

6. 重点

  • 之前学习的8种基本数据类型
  • 我们能够遇见的所有的类,包括我们刚刚创建的Car 是一种数据类型。(除了基本数据类型,其他都是引用数据类型)。所有的类都是引用数据类型
  • 此刻起我才真正了解class这个关键字,用来创建一个类,用来创建一个数据类型,因为类就是一个数据类型。像car1,car2,car3......car100叫引用,它是指向内存中的一块区域,存放空间,叫做堆。

两块内存空间:

  1. 栈:我们存的是变量和基本数据类型(特点:先进后出)地址是一个十六进制的字符串

引用数据类型的初始值为null

赋值时除了String以外,其余的引用数据类型都需要new

7. 权限修饰符

1.public 共有的,公共的 权限最大,只要是public声明的方法,只要在同一个工程中,都能用。

  • 可以放在类、属性、方法、构造器上

2.protected 受保护的:可以跨包,如果跨包必须是它的子类

  • 可以放在属性、方法、构造器上

3.默认的(啥也不写)default:只有当前包下可以访问(把包导进来也不行)

  • 可以放在类、属性、方法、构造器上

4.private 私有的 权限最小,只有在当前类才能用

  • 可以放在属性、方法、构造器上

8. 成员方法

1.方法名不能重复

  • 如果一个方法有static,要调用一个非static的方法,就只能创建对象,使用对象.方法的

形式调用

Ch01 c = new Ch01( ) ;

c.run( );

自己调自己:递归

递归的问题:StackOverflowError 栈溢出(内存溢出)

8.1方法的重载(OverLoad)

要求和特点:

  1. 方法名相同
  2. 参数不同才能构成方法的重载
  • 参数的类型不同
  • 参数的个数不同
  • 参数的顺序不同

与返回值类型无关;与访问权限修饰符无关;与方法体无关。方法的重载只跟参数有关

  1. 方法的重载一定是发生在同一个类里

方法的重载的好处

为了把功能相似甚至是相同的方法可以用同一个名字

8.2不定长参数
  1. 参数列表中只能(至多)有一个不定长参数

  2. 不定长参数必须在最后位置

不定长参数的本质是数组

java.lang包下的所有的类不需要显式的导入,剩下的都需要导包

8.3构造器(构造方法)

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

特点(特性):

  1. Java在new对象的时候,先看对象所对应的类有没有构造器,有的话有什么样的构造器;如果没有构造器,则无法构建对象(创建对象)

  2. 每个类会有一个默认的无参的构造器

  3. 在对象被实例化时调用了构造器

  4. 我们创建对象实际上是通过构造器创建的

  5. 如果一个类中显示的声明了一个构造器,原来默认自带的无参构造器就失效(被覆盖)。如果有多个构造器,必须重载。

8.4类与类之间的关系(2种)

1.has a的关系(包含、使用、有的关系)

eg:人有一只猫