1.初识面向对象:
1.面向对象与面向过程的区别:
面向过程强调“怎么做”
面向对象强调“谁来做”
2.面向对象的好处:
解决大型的问题,使用面向对象代码更简洁
以人类的思考问题的方式
3.面向对象的思考步骤:
1、分析判断涉及几个类,分别是什么
2、抽取每个类的属性、方法,再加以定义
3、创建对象,然后调用方法、属性,面向过程的步骤
2.类与对象的理解:
类:具有相同属性和方法的一组对象(一类事物)的统称
对象:类的实例化,万物皆对象,每一个具体的存在都是对象
二者的区别:类是抽象的,是模板,对象是具体的
二者的关系:对象由类创建出来的,类是由对象抽象总结出来的
类名 对象名 = new 类名();
对象名.属性 = 值;
对象名.方法();
static
用static修饰的属性是叫做类变量,特点:(共享的,一直存在,全局的)
用static修饰的方法是叫做类方法,特点:通过类名去调用
不是static修饰的属性是叫做实例变量,特点:独立的,通过对象去调用
不用static修饰的方法是普通成员方法,特点:通过对象去调用
3.类的成员:
1.属性Field
声明的格式:修饰符 数据类型 属性名;
分为两种:实例变量和类变量
实例变量是指每个对象独立的,修改其中一个对象的实例变量值不会影响其他对象的这个实例变量值
类变量是所有对象共享的,其中一个对象把该变量修改了,那么所有对象的该变量值都修改了
2.成员方法Method
声明的格式:修饰符 返回值类型 方法名(形参列表){方法体}
分为两种:非静态的成员方法和静态的成员方法
谁能访问它
静态的方法
类名.方法()可以调用
对象.方法()可以调用,但是不建议这样写
非静态的方法
对象.方法()只能用对象访问
它能访问谁
静态的方法
只能访问静态的属性与方法
非静态的方法
可以访问非静态的成员
还可以访问静态的成员
3.构造器Constructor
声明的格式:修饰符 方法名(形参列表){方法体},没有返回值类型,方法名必须与类名相同
作用:
1、和new一起使用时创建对象
2、用来初始化属性
全局变量和局部变量
作用范围
全局变量,定义它的类中
局部变量,只在定义它的方法或代码块中有效
默认值
全局变量是有默认值,byte,short,int,long都是0,float和double是0.0,char是'\u0000',boolean是false,引用类型都是null
局部变量统统没有默认值
是否可以重名
全局变量允许与局部变量重名,如果是实例变量,通过this去修饰,如果是类变量,通过类名去修饰
对于局部变量,如果作用范围不冲突,是可以重名,如果作用范围冲突,是不允许重名
4.代码块
非静态代码块,构造块
语法:{},定义在类中,方法外
每次创建实例对象都会调用
优先于构造器
一般用于对象的属性的初始化,通常用于共性内容进行初始化,就不用在每个构造方法中都写一份
可以多个,如果多个,按照顺序执行
静态代码块
语法: static{},定义在类中,方法外
随着类的加载而加载,而且只执行一次
优先于构造块
在静态代码块中,不能使用、访问非静态成员
可以有多个,如果多个,就顺序执行
4.包:
创建包
1、直接在源文件的第一行写,package 包名;
2、在src上右键,new--package
3、在定义类的同时,指定它的包
作用
1、避免重名
2、用于权限控制
3、划分项目的结构层次,使得源文件管理的更有条理,功能相似的类放在同一个包
命名
规则:只能是字母、数字、下划线,$,小圆点,不能使用关键字和保留字
规范:所有字母都小写,域名倒置 com.公司名.项目名.模块名
package 包名;
import 包名;
import 包.*; *代表的是本包的所有类型,不包括子包
class 类名{
}
5.几个关键字:
权限修饰符
private:只限于本类中可见
默认default:只限于本包可见
protected:本包的中其他类与其他包的子类可见
public:任意位置
和包相关
package:声明包的关键字,只能写在源文件中可运行代码的第一行
import
格式
特点:
位置:只能在package,和class之间
可以多个,没有顺序
导入不同包,但是名字相同的类型,其中一个使用导包,另一个使用全限定名
静态导入,JDK1.5,格式import static 包名.类名.*;作用就是使得本类使用其他类的静态方法不用加类名
this
代表的是当前对象
作用:
1、实例变量与局部变量重名时,为了区别,使用this.修饰实例变量
2、this()或this(实参),调用本类的其他构造方法
3、this.方法(),调用本类的其他非静态的成员方法,这个使用的不过
final
代表最终
可以修饰类、方法、属性、局部变量
修饰类:表示该类不能被继承
修饰方法:表示该方法不能被重写,final的方法注意,可以被子类继承,但不能被重写(”可以被模仿不能被超越“)
修饰属性:表示该属性是常量,没有默认值,必须初始化(显式初始化、代码块、构造器),如果使用构造器进行初始化,那么需要保证每个构造器中都有一条为该常量初始化的语句。不能再修改
修饰局部变量:表示该局部变量是常量,必须初始化,而且不能再修改
static
代表静态的
可以修饰:属性、方法、代码块、内部类
修饰属性:表示类变量
随着类的加载而加载,随着类的加载就在方法区分配空间
所有对象共享的属性,其中一个对象对它进行修改,其他对象都会受到影响
优先于对象存在
如果不是私有化,可以通过类名.类变量
可以在静态方法或成员方法中都可以访问
修饰方法:表示类方法
随着类的加载而加载,只加载一次,普通的成员方法是可以加载多次
优先于对象存在
通过类名.静态方法()
在静态方法中不能调用非静态成员,也不能出现this和super
修饰代码块:
static{}
修饰内部类:
public class m(){
//静态内部类
private static class n(){}
}
6.数据类型的转换:
基本数据类型的转换
自动转换
在混合运算时数据存储范围小的自动转成数据范围大
char,short,byte-->int-->long-->float-->double
char,short,byte不会互相转,boolean与任意一种都不转
强制类型转换
从存储数据范围大的到小的,注意会损失精度
引用数据类型,父子类
向上转型,自动转换,把子类对象赋值给父类的引用变量
向下转型,强制转换,把父类的变量引用,强制赋值转换为子类的变量引用
基本数据类型与包装类之间
自动装箱:基本数据类型可以直接赋值给它的包装类对象,只能赋值给自己的包装类
自动拆箱:包装类对象可以直接赋值给它对应的基本数据类型的变量
还可以使用包装类的静态方法/构造方法实现字符串与基本数据类型之间的转换
int-->Integer,flout--Flout,double-->Double,char-->Character等等