一、java概述
1.java包含三种技术架构:
- javaEE是开发企业环境下的应用程序,即web程序开发;
- javaSE是桌面应用程序开发;
- javaME是电子消费产品和嵌入式设备,如手机应用;
2.java安装环境
- jdk是java开发和运行环境,包括了开发工具和jre;
- jre是java程序的运行环境,包含了所需的类库和JVM;
- 环境变量配置包括:JAVA_HOME=%安装路径%\Java\jdk;CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;path=%JAVA_HOME%\bin
3.javac命令和java命令
- java分为两个部分,一个是编译,一个是运行;
- javac负责编译部分,将.java编译成.class文件;
- java负责运行部分,启动jvm加载运行所需的类库,并对class文件进行执行;
- 文件被执行的起点是main函数;
4.java内存
- 寄存器:给CPU使用;
- 本地方法区:运行时本地系统平台中的内容,分版本,在不同操作系统中不一样;
- 方法区:保存着,类、静态变量、静态方法、常量、普通方法,线程共享的,大小不固定,jvm动态调整,垃圾回收期自动回收;
- 栈内存:存储局部变量( 函数中定义的变量,函数上的参数,语句中的变量 ),先进后出,存取速度比堆快,线程私有,当数据运算完成,内存自动释放;
- 堆内存:存储数组和对象,即封存多个数据的实体,new对象时,从中开辟一段空间用于存放,动态分配,先进先出,存储速度慢,是所有线程共有的,而且每个实体都有内存首地址值,都有默认默认初始化值,使用垃圾回收机制管理;
二、java语法
1.变量
- 变量是内存中的一个存储空间,用于存储数据,该空间可重复使用;
- 变量空间的开辟三要素包括数据类型、变量名称、变量初始值;
- 变量的作用域是从定义变量开始,到变量所在大括号结束;
- 变量的生存周期是从定义位置存活在内存中,到达所在的作用域后从内存中消失;
2.数据类型
- 基本数据类型:byte、short、int、long、float、double、char、boolean;
- 引用数据类型:数据、类、接口;
- 数据类型级别:byte\char\short->int->float->long->double;
- 强制类型转换:将一个高级别数据赋值给低级别变量,可强制转换;
3.运算符号
- 算数运算符:+、-、*、/、%;
- 赋值运算符:=、+=、-=、*=、/=、%=;
- 比较运算符:==、equals,运算后返回true/false;
- 逻辑运算符:&、|、^、!、&&、||;
- 位运算符:& | ^ << >> >>>(无符号右移),操作二进制;
3.1常用运算符:
- &是两边为true则为true,否则为false,且两边都参与运算;
- &&是短路与,左边为false右边不参与运算;
- |是两边为false则为false,否则为true,且两边都参与运算;
- ||是短路或,左边为true,右边不参与运算;
4.语句
- if用于单个数据进行比较判断;
- switch 用于一个值与多个值进行比较判断;
- do...while\wihle\for均用于集合或数组进行循环;
- 返回值包括break、continue、return,break是结束当前整个循环,continue是结束本次循环,继续下次循环,return是结束所有循环,退出当前方法;
5.函数
- 函数定义格式如下图:
- 函数返回值没有时,返回值类型用关键字void表示,有返回值使用return;
- 函数的作用:用于定义功能,用于封装代码提高复用性;
- 主函数:保证该类独立运行,它是程序入口,被JVM调用;
- 函数重载:在一个类中,如果两个及以上同名函数,参数的个数或者类型不同;
6.数组
- 用于存储同类型数据的容器;
- 用于封装数据,对数据进行编号;
- 表现形式:元素类型[] 变量名 = new 元素类型[元素的个数];元素类型[] 变量名 = {元素1,元素2...};元素类型[] 变量名 = new 元素类型[]{元素1,元素2...};
三、面向对象
1.特点
- 将复杂的事情简单化;
- 将以前过程中的执行者变成指挥者;
- 负荷现在人们思考的习惯;
2.对象和成员
- 当对方法只有一次调用时,可使用匿名对象,当出现多次调用,则必须给对象命名;
- 成员变量对应事物的属性,成员函数对应事物的行为,它们均可在类中定义;
- 属性存储数据,为安全需私有化,对外提供公共方法;
3.访问权限
- public:权限最大,可公共访问,被修饰的类、方法、属性,支持跨类访问、跨包访问;
- protected:权限次之,保护访问权限,被修饰的属性、方法,只能被类本身及其子类访问;
- default:默认访问权限,只允许在同类或同包访问,外包所有类均不可访问,接口例外;
- private:访问权限最小,私有访问,被修饰的属性、方法,只能被该类的对象访问,不能跨包访问,子类也不能访问;
修饰符 | 同类 | 同包 | 子类 | 全局 |
---|---|---|---|---|
public | ✓ | ✓ | ✓ | ✓ |
protected | ✓ | ✓ | ✓ | |
default | ✓ | ✓ | ||
private | ✓ |
4.成员变量和局部变量
- 成员变量直接定义在类中,局部变量定义在方法、参数、语句中;
- 成员变量在本类中有效,局部变量在所属大括号中有效,括号结束,变量失去作用域;
- 成员变量存在堆内存,随对象一起产生或消失,局部变量存在栈内存中,随所属区域的运行而存在,消失而释放;
5.成员变量和静态变量
- 成员变量属于对象,静态变量属于类;
- 成员变量存于堆内存,静态变量存在于方法区;
- 成员变量的生命周期与对象同步,静态变量的生命周期与类同步;
- 成员变量只能被对象调用,静态变量能被对象、类调用;
- 成员变量是对象的特有数据,静态变量是对象的共享数据;
6.构造函数
- 用于对象创建时,对对象进行初始化;
- 函数名称和类名称相同;
- 不需要定义返回值类型;
- 没有具体返回值;
- 类中没有定义构造函数,该类会自动生成一个空参数的构造函数;
- 同一个类,可以有多个构造函数,但参数需不同,因此是以重载方式提现;
6.1构造函数和一般函数
- 两个函数定义格式不同;
- 构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次;
- 一般函数,是对象创建后,需要调用才执行,可以被调用多次;
6.2构造函数和构造代码块
- 构造函数是给对应的对象进行初始化,具有针对性;
- 构造代码块是给所有的对象进行初始化,即所有的对象都会调用一个代码块,只要对象建立,就会调用这个代码块;
6.3对象创建内存变化步骤
- 先将硬盘中类文件加载进内存;
- 执行main方法,在栈内存开辟main方法的空间,然后在栈区分配一个变量P;
- 在堆内存开辟实体空间,分配一个内存首地址,即new;
- 在该实体空间中进行属性的空间分配,并进行默认初始化;
- 对空间属性进行显示初始化;
- 对实体的构造代码块初始化;
- 调用实体对应的构造函数,进行构造函数初始化;
- 将首地址赋值给P,P变量引用该实体,即指向该对象;
7.对象特征
7.1抽象abstract
- 抽象是将一类对象的共同特征,总结出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注对象的哪些属性和行为,并不关注这此行为的细节是什么;
- 研究事物的静态特征,形成对象的属性;
- 研究事物的动态特征,形成方法或函数;
- 事物抽象后形成的结果,即创建的类class;
- 类和对象之间可以相互转变,通过new的方式;
特点:
- 抽象方法所在的类要标识为抽象类,类和方法都有abstract修饰;
- 抽象方法只定义方法声明,不定义方法实现;
- 抽象类不可以被创建对象,即不能实例化;
- 只能通过子类继承父类,并覆盖父类中所有抽象方法后,子类才能实例化,否则子类还是抽象类;
- 抽象类中有构造函数,可以定义非抽象方法,也可以不定义抽象方法;
- abstract不能和final、private、static共存;
7.2封装
- 封装是隐藏对象的属性和实现细节,仅仅对外提供公共访问方法;
- 封装的好处是将变化隔离,便于使用,提高重用性,安全性;
- 封装的原则是将不需要对外提供的内容隐藏起来,把属性隐藏,提供公共方法对外访问;
7.3继承extends
- 继承是从已有类中继承信息创建新类;
- 子类可以继承父类的属性和方法;
- 提高了代码的复用性;
- java只支持单继承,且保留了多重继承;
- 单继承中一个类只有一个父类, 多继承中一个类可以有多个父类;
- 查阅父类中的内容,可以知道该体系的基本用法,创建最底层子类的对象,可以使用父类和子类的所有功能
7.4多态
- 多态是允许相同或不同子类型的对象对同一消息作出不同响应
- 重载:同一个动作作用在同一个对象上拥有不同的解释 overload
- 狭义的多态指重写,重写是指同一个动作作用在不同的对象上拥有不同的解释 override
- 多态的好处:提高程序扩展性;
- 多态的提现:父类引用或者接口的引用指向自己的子类对象;
- 多态的弊端:当父类引用指向子类对象时,只能访问父类中具备的方法,不能访问子类中特有的方法;
- 多态的前提:必须要有关系,继承或实现,会有覆盖操作;
多态在子父类中成员上的提现:
- 成员变量,编译运行看=左边;
- 成员函数,编译看=左边,运行看=右边;
- 静态函数,编译运行看=左边;
8.关键字
8.1this
- this代表对象,是所在函数所属对象的引用;
- 哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用;
- 还可以用于构造函数的调用;this.调用成员属性和方法;this()调用本类中对应参数的构造函数;
-
用this调用构造函数,必须定义在构造函数的第一行。因为构造函数是用于初始化的,所以初始化动作一定要执行,否则编译失败;
8.2static
- static是一个修饰符,用于修饰成员变量或成员函数;
- 想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰;
- 被静态修饰的成员,可以直接被类名所调用,类名.静态方式;
- 静态随着类的加载而加载,而且优先于对象存在;
- 静态方法只能访问静态成员,不可以访问非