面向对象(上):
概念:
-
类: 是一类事物的概念(抽象,没有具体化)
-
对象: 类的具体化。
-
万物皆对象
-
程序是对象的集合,他们通过发送消息来告知彼此所要做的
-
每个对象都有自己的由其他对象所构成的存储
-
每个对象都拥有其类型
-
某一特定类型的所有对象都可以接收同样的消息
类似类的继承,接口的实现,子类和子接口都可以接收父类和父接口能接收的消息
1. 变量:
变量又称属性
声明方式:
权限修饰符(可加可不加) 数据类型 变量名 = 变量值;
变量分为成员变量和局部变量
区别:
成员变量:
- 可以直接定义在类的{}内
- 作用域为整个类
- 需要实例化对象才可以调用
- 各种类型的变量如果不赋值,都以默认值初始化
- 加载到堆空间
局部变量:
- 声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
- 作用域只在声明区域内
- 直接通过类名就可以调用
- 一定要赋初值
- 加载到栈空间
2. 方法:
方法的声明:
权限修饰符 返回值类型 方法名(形参列表){
方法体
}
-
权限修饰符: public protected friendly private,区别后面会讲
-
方法名:首字母小写,驼峰命名,要做到见名知意
-
返回值就是一个方法结束后会生成的值
返回值类型:
- void:空返回值,无需返回任何值
- 其他类型的值:格式
return 值
-
形参列表
可以声明一到多个参数
格式:形参类型 形参名1,形参类型 形参名2,.......
如果遇到形参很多时,可以使用不定项参数的方式
格式:public void method(int...args);
这时参数被看成是一个数组,可以通过数组下标调用值
-
方法体:
方法功能的体现。
Java中参数的传递:
Java中只有值传递(面试中笔试常见题目)
- 基本数据类型:传递的值是传变量的值的副本给形参,与变量本身无关,在原方法体中变量不受影响
- 引用类型:传这个对象地址的值,把地址的值copy给实参,别的方法中的操作会影响该对象
- 实参:就是调用方法时传递的值,比如 add(3,4); 3和4是实参
- 形参:是方法中定义的参数,比如 public int add(int a,int b){} 这里的a和b是形参 基本类型传递
注意: String虽然也是引用类型,但是参数的传递规律遵循基本数据类型的参数传递
3. 封装性
思想:
-
我们程序设计追求“高内聚,低耦合”。 高内聚 :类的内部数据操作细节自己完成,不允许外部干涉; 低耦合 :仅对外暴露少量的方法用于使用。
-
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。
通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
四种权限修饰符:
- public
- protected
- default(什么都不写)
- private
具体的修饰范围:
4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类
修饰类的话,只能使用:缺省、public
4. 构造器:
格式:
public 类名(参数类型 参数名1,参数类型 参数名2,....){
方法体
}
作用:
- 创建对象
- 初始化对象的信息
说明:
- 如果一个类没有定义构造器,则系统默认提供一个空参的构造器
- 定义构造器的格式:权限修饰符 类名(形参列表){}
- 一个类中定义的多个构造器,彼此构成重载
- 一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器
- 一个类中,至少会有一个构造器。
5. 关键字
-
this
this可以调用属性,方法this理解为:当前对象 或 当前正在创建的对象
使用方式:
this.属性名 this.方法名
注意:this只能在本类的非静态方法中使用
-
package
- 包,为了更好的实现项目中类的管理
- 声明在源文件的首行
- 包,属于标识符,遵循标识符的命名规则、规范
- 每个包都会以"."分隔。
声明方式(在文件首行):
package xxx.yyy.zzz
表示xxx包下的yyy包下的zzz包中的文件
- import
import的使用:
- 在源文件中显式的使用import结构导入指定包下的类、接口
- 声明在包的声明和类的声明之间
- 如果需要导入多个结构,则并列写出即可
- 可以使用"xxx.*"的方式,表示可以导入xxx包下的所结构
- 如果使用的类或接口是java.lang包下定义的,则可以省略import结构
- 如果使用的类或接口是本包下定义的,则可以省略import结构
- 如果在源文件中,使用了不同包下的同名的类,则必须至少一个类需要以全类名的方式显示。
- 使用"xxx.*"方式表明可以调用xxx包下的所结构。但是如果使用的是xxx子包下的结构,则仍需要显式导入
- import static:导入指定类或接口中的静态结构:属性或方法。