目录
导图
面向对象
Java是一门面向对象的编程语言,在Java中,万事万物皆对象
(在Linux中万事万物皆文件)
面向过程和面向对象
面向过程:面向过程就是分析出实现需求需要的步骤,通过一些方法来一步一步实现
面向对象(行为化):把整个需求的按照特点、功能划分,将这些存在共性的部分封装成类(类实例化之后才是对象),让对象去解决问题
三大特性
在Java中,面向对象有三(四)大特征:
封装
继承
多态
抽象
成员变量
如果把变量直接声明在类里,叫成员变量(全局变量);如果把变量声明在某个方法里,叫局部变量。
创建对象的过程,类的实例化的过程,对象又叫做类的一个实例
我们创建了一个Car类的对象car1,这个car1就是对象的名。其实这个car1就是个标识符。
对象名的命名规则:小驼峰
创建对象的语法:类名 对象名 = new 类名( );类名 对象名 = new 构造器(类名())
重点
之前我们学习过8中基本数据类型
从今天开始我们的数据类型就更多了,我们能够遇见的所有的类,包括我们刚刚创建的Car 是一种数据类型。(除了基本数据类型,其他都是引用数据类型)。所有的类都是引用数据类型
· 此刻起,我们才真正了解了class这个关键字,用来创建一个类,用来创建一个数据类型,因为类就是一个数据类型。像car1,car2,car3......car100叫引用,它是指向内存中的一块区域,存放 空间,我们叫做堆。
我们需要了解两块内存空间:
栈:我们存的是变量和基本数据类型(特点:先进后出)地址是一个十六进制的字符串
堆: 引用数据类型的初始值为null
赋值时除了String以外,其余的引用数据类型都需要new
成员方法
public :访问权限修饰符
void :没有返回值
run( ):方法名(标识符)
{ }:方法体(这个方法要干哪些事)
( ):传参数
参数可以有多个,中间用逗号隔开
Java中的传参需要明确数据类型
在声明方法时,括号里的参数:形式参数(形参),可以当做局部变量使用
在调用方法时,
形参是在声明处,实参是在调用处
有返回值的方法
public
boolean:返回值类型,我这个方法经过一系列的运行过后,要得到一个具体的值,返回值,返回值的类型是boolean
返回值用return xxx; 类型要匹配
有返回值的方法在执行后会得到一个具体的值,这个值可以存下来
开发中,大部分的方法都有返回值
return关键字
return关键字终止方法继续执行
返回方法的返回值
标识符的命名规则:
(字母、数字、下划线、美元符号、数字不能开头)
类名:大驼峰(所有单词的首字母大写)
属性名、方法名:小驼峰(除了第一个单词,其他的单词的首字母大写)
访问权限修饰符
public 共有的
protected 受保护的,如果跨包,必须是它的子类 只能修饰属性 方法 构造器默认的
友好的,当前包下可以访问
private 私有的 只能修饰属性,方法 构造器
成员方法
方法名不能重复
如果一个方法有static,要调用一个非static的方法,就只能创建对象,使用对象.方法的形式调用
Ch01 c = new Ch01( ) ;
c.run( );
自己调自己:递归
递归的问题:StackOverflowError 栈溢出(内存溢出)
在开发中到底要不要用递归?如果用的话,要注意什么?
方法的重载(OverLoad)
方法名相同
参数不同才能构成方法的重载
参数的类型不同
参数的个数不同
参数的顺序不同
与返回值类型无关;与访问权限修饰符无关;与方法体无关。方法的重载只跟参数有关
方法的重载一定是发生在同一个类里
方法的重载的好处
为了把功能相似甚至是相同的方法可以用同一个名字
不定长参数
参数列表中只能(至多)有一个不定长参数
不定长参数必须在最后位置
·不定长参数的本质是数组
public static int sum(int...arr){
for (int i:
arr) {
System.out.println(i);
}
return 0;
}
·java.lang包下的所有的类不需要显式的导入,剩下的都需要导包
构造器(构造方法)
语法:访问权限修饰符 类名(参数列表){ }
特点(特性):
- Java在new对象的时候,先看对象所对应的类有没有构造器,有的话有什么样的构造器;如果没有构造器,则无法构建对象(创建对象)
- 每个类会有一个默认的无参的构造器
- 在对象被实例化时调用了构造器
- 我们创建对象实际上是通过构造器创建的
- 如果一个类中显示的声明了一个构造器,原来默认自带的无参构造器就失效(被覆盖)。如果有多个构造器,必须重载。
类与类之间的关系(2种)
1.has a的关系(包含、使用、有的关系)
eg:人有一只猫
总结
抽象的概念需要去练习多加理解,就会事半功倍