面向对象
对象和类
世界由对象组成
类可以生成对象,类是对象的抽象
- 对象:是具体的事物
- 类:是对对象的抽象(抽象 抽出象的部分)
- 先有具体的对象,然后抽象各个对象乊间象的部分,归纳出类通过类再认识其他对象。
对象的特征
属性——对象具有的各种特征
- 每个对象的每个属性都拥有特定值
方法——对象执行的操作
对象是用来描述客观事物的一个实体,由一组属性和方法构成
类:具有相同属性和方法的一组对象的集合
类是对象的类型
不同于int类型:具有方法
对象和类
-对象和类的关系:特殊到一般,具体到抽象。
-类:我们叫做class。 -对象:我们叫做Object, instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。
-类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
-类是用亍描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所
应具有的静态和动态属性。
-对象是Java程序的核心,在Java程序中“万事万物皆对象”。
-JDK提供了很多类供编程人员使用,编程人员也可定义自己的类。
类的属性
▪属性 field,或者叫成员变量
▪属性用于定义该类或该类对象包含的数据或者说静态属性。
▪属性作用范围是整个类体
▪在定义成员变量时可以对其初始化,如果不对其初始化,Java使
用默认的值对其初始化。(数值:0,0.0 char:\u0000, boolean:false, 所有引
用类型:null)
▪属性定义格式:
▪[修饰符] 属性类型 属性名 = [默认值]
类的方法
▪ 面向对象中,整个程序的基本单位是类,方法是从属于对象的
▪ 方法定义格式:
[修饰符] 斱法返回值类型 斱法名(形参列表 ) {
// n条语句
}
▪ JAVA中方法参数传递是:值传递!
局部变量和成员变量
区别
– 声明位置不同: 类中 方法中
– 作用范围不同: 当前类的方法 当前方法
不同的方法中即使有同名的局部变量,没有关系,互不影响,建议相同
– 内存存放的位置的:栈内存中 堆内存中
– 成员变量有默认值;局部变量没有默认值
引用类型
Java 语言中除基本类型之外的变量类型都称之为引用类型。
Java中的对象和数组是通过引用对其操作的.
– 引用可以理解为一种受限的指针
– 指针是可以迚行不整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。引用不行,只能进行赋值运算。
– 引用就是一个变量或对象的别名(引用的本质是一个对象);指针是一个段内存空间的地址(指向存储一个变量值的空间戒一个对象的空间)
内存分析
栈:
– 存放:局部变量
– 先迚后出,自下而上存储
– 斱法执行完毕,自动释放空间
堆:
– 存放new出来的对象
– 需要垃圾回收器来回收:System.gc()
方法区:
– 存放:类的信息(代码)、 static变量、字符串常量等.
构造器
构造器定义: constructor 构造方法
– 一个在创建对象时被自动调用的特殊方法。
构造器作用:
– 为对象进行初始化(成员变量)工作。
构造器是一种特殊的方法:
– 构造器的方法名必须和类名一致!
– 构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能在构造器里调用return。 – 通过new关键字调用!!
– 如果我们没有定义构造器,则系统会自动定义一个无参的构造方法。如果已定义则编译器不会添加无参数构造方法!
– 与普通方法一样,构造方法也可以重载
方法调用
形参和实参
– 定义斱法的参数是形式参数
– 调用斱法的参数是实在参数
– 调用斱法时要求参数个数相同,类型兼容
参数传递
– 基本数据类型的参数传递
无法通过斱法调用改变变量的值
– 引用数据类型的参数传递
可以通过斱法调用改变变量的值
this使用
this:表示当前对象的指针
指向当前对象,表示当前对象的引用
用处:
1、构造方法,当构造方法中的参数名称跟类的成员变量名称一样的时候,可以使用this代表当前对象
注意:有了this之后,可以将构造方法的参数跟成员变量保持一致
当构造方法中需要调用其他的构造方法时,可以使用this(name)调用其他构造方法,但是必须位于方法体的第一行
2、普通方法中:
当多个普通方法之间需要调用的时候,可以使用this来进行调用,指的是当前对象的其他方法
3、成员变量的使用:
当方法中的参数名称跟成员变量保持一致的时候,使用 this.变量名称 表示的是对象的值,而使用变量名称表示形参列表中的值
笔记
所有类定义的时候可以添加属性和方法,但是不是必须要写的
一个java文件中可以定义N多个class,但是只能有一个public class并且public class的类名跟文件名保持一致
属性:
语法:
[访问修饰符] 数据类型 属性名称 = 值;
注意:
定义属性的时候可以有值也可以没有值
必须要包含类型和名称
方法:表示行为
语法:
[访问修饰符] 返回值类型(任何类型) 方法名称(形参列表){
逻辑代码
}
注意:
1、方法的访问修饰符可以不写
2、方法可以有返回值,也可以没有,void表示没有返回值的意思
3、形参列表可以有,也可以没有
4、java中方法的传参都是值传递(后续会讲)
对象的创建和使用
1、使用new关键字来创建对象
ClassName objectName = new ClassName();
2、对象的使用
使用对象的时候可以通过 对象名称.属性 或者 对象名称.方法 来使用属性和方法
构造方法:
创建对象的时候默认会调用构造方法来创建对象,(在堆中开辟空间),可以完成成员变量的某些初始化操作
构造方法的语法:
方法名称:构造方法的方法名称必须跟类的名称保持一致
访问修饰符:后面讲
形参:可以用户自定义添加,跟方法的普通参数一样
方法体:完成对象的初始化功能
返回值:没有返回值
注意:
1、创建完类之后,如果没有手动调用构造方法,会有一个默认的无参的构造方法供调用
2、当用户自定义了构造方法之后,默认的无参构造方法就不能够使用了,必须要手动定义无参构造方法
3、同一个类中可以包含多个同名的构造方法
重载:在一个类中可以包含多个重名的方法,但是注意方法的参数列表不能相同
三个方面的不同:
- 参数的个数不同
-参数的类型不同
-参数的顺序不同
注意:
一般构造方法都会进行重载(一个类中可能包含多个属性值,当只需要给部分属性初始化的时候需要调用不同的构造方法)
变量:
局部变量:
定义在方法中的变量称之为局部变量
作用域:从定义的位置开始到整个方法结束
局部变量不包含默认值,如果没有使用当前变量的话,可以不赋值
注意:局部变量只能在当前方法中使用,其他地方无法使用
成员变量:
定义在方法外,类内的变量叫做成员变量(全局变量)
成员变量包含初始值:int 0 String null boolean false
作用域:整个类体内
字符串比较:
字符串在比较的时候:
==:比较的是地址
equals:比较的是具体的值
static:
修饰成员变量的时候,表示静态成员变量或者叫类变量,普通变量在使用的时候,必须要通过对象名进行调用,类变量或者静态变量可以使用对象名调用也可以使用类名进行调用
修饰方法的时候,表示静态方法或者叫类方法,普通方法在使用的时候,必须要通过对象名进行调用,类方法或者静态方法可以使用类名,也可以使用对象名
注意:
1、静态变量,在创建对象之前被初始化,或者说在类被载入之前进行初始化
2、静态变量被所有的对象共享,属于公共变量,对象和类都可以直接调用,但是推荐使用类来调用
3、成员变量放在堆中,而静态变量放在方法去中静态区
4、静态变量不能定义在静态方法中
5、静态方法可以在非静态方法中进行调用
6、静态方法中不能直接调用非静态方法
7、静态方法中不允许出现this调用
8、一般工具类中的方法定义为static
package:包,对应到文件系统就是多级目录
为了解决两个问题:
1、文件同名问题
2、为了方便管理类,将具体处理功能的代码放到同一个目录下
使用:
一般定义package会放置在java文件的第一行
package 域名的倒写
package com.mashibing.
完全限定名: 包名+类名
JDK中常用的包:
lang:不需要手动导入,自动加载
util:工具包
net:网络包
io:输入输出流包
代码块: 使用{}括起来的一段代码叫做代码块
分类:
普通代码块:定义在方法中,使用{}括起来的代码叫做普通代码块
构造代码块:定义在类中的使用{}括起来的代码叫做构造代码块
注意:每次代码运行的时候回将构造代码块中的代码添加到构造方法的前面
构造代码块中的代码会添加到每一个构造方法中,当使用this(参数)的时候不会添加
静态代码块:使用static{}括起来的代码叫做静态代码块,在程序载入的时候优先执行数据库连接等其他提前需要准备好的代码会放在static代码块
同步代码块:
在多线程的时候回使用,用来给共享空间进行加锁操作(后面讲)
执行顺序:静态代码块–》构造代码块(创建对象的时候才会用到)–》普通代码块