java
2018-06-05 19:12:23 113 举报
AI智能生成
java基础知识
作者其他创作
大纲/内容
JVM内存模型
内存区域
方法区(Method Area)
线程共享区域,
堆(heap )
所有线程共享区域,虚拟机启动创建,所有对象实例以及数组都要在堆上分配
虚拟机栈 VM Stack
方法内存模型,创建栈帧
先进后出,后进先出
每一个方法创建一个栈帧,存放当前方法数据信息,调用完毕销毁
本地方法栈
虚拟机使用的native方法服务
程序计数器 PCR
当前线程所执行的字节码行号指示器
GC垃圾回收
main方法
JVM调用主方法
string参数暴露给程序运行者,用于给程序传递一些信息
面向对象
子主题
类的多态
对象具有两种类型
编译类型是运行类型的父类
运行类型
前提
继承关系
实现关系
作用
当把不同的子类对象当做父类来看待,可以屏蔽不同子类之间的实现差异
多态下方法调用
情况一
方法存在与父类
执行父类
情况二
方法存在于子类
报错。编译类型无法找到
情况三
存在父类和子类
执行子类
情况四
方法存在子类和父类中,但是是静态方法
静态方法的调用只需要类即可
类的定义
注意点
1:如果类使用了public修饰符,必须保证当前文件名和当前类名相同
2:类名应该是一个名词,首字母大写,并用驼峰表示法
3:定义类的时候,专门为描述对象提供了一个类,该类不需要main方法
修饰符 class 类名{
成员变量
成员方法
}
成员变量
成员方法
}
object是java中的根类
类的继承
super
当前对象的父类对象
必须先调用父类构造器才能调用子类构造器
如果父类没有提供无参构造器,则要子类显示调用super调用父类带参构造器
super class 基类,超类,父类
sub class 子类
extends superclass
注意点
如果父类中的成员是public修饰,子类继承
如果父类成员是用protected修饰,子类也可以继承
如果父类和子类在同一个包中,此时子类可以继承父类中缺省修饰符的成员
如果父类中的成员用private修饰,子类无法继承
父类的构造器子类也不可以继承
类型转换
自动
子类对象赋值父类变量
强制
父类类型对象赋给子类变量
animal a=new dog(); dog=d=(dog)a;
子主题
创建对象
类型(类名) obj=new 类名();
setter()注入
构造注入
对象的生命周期
匿名对象
创建对象之后没有赋给某一个变量,仅适用一次
对象比较
比较的是内存中的地址
创建对象实际是在调用构造器
实例化过程
在方法区加载clss文件
在栈中创建一个变量保存堆内存中新建的对象引用。
构造器
编译器在编译源文件的时候,会默认的创建一个缺省的构造器
作用
构建对象,必须和new一起使用
完成对象的初始化操作
特点
构造器的名称和当前所在类的名称相同
禁止定义返回类型
在构造器中,不需要使用return语句,默认返回当前创建对象的引用
编译器创建默认构造器无参数,无方法体
类没有使用public修饰,写编译器创建的构造器也没有,反之亦然
显示构造器
一旦自定义了构造器后,就会取代默认构造器
构造器中可以给对象传递参数来设置初始值,也可以调用初始化方法
重载
构造器重载时的相互调用
修饰符
static
当jvm把字节码加载进jvm的时候,static修饰的成员已经在内存中存在,
对象是new关键字创建出来的,所以优先于对象存在,
static修饰的成员被该类型所有对象共享
本质:依然使用类名访问,和对象没有关系
本质:依然使用类名访问,和对象没有关系
static修饰的成员直接属于类不属于对象,所以可以直接使用类名访问static成员
其修饰的成员属于类,修饰的资源是类级别的。而不是对象级的
静态的,可以修饰字段、方法、内部类,随着所在类的加载而加载
存储位置
方法区
static方法中,只能调用static成员,非static方法可以访问静态成员也可以访问实例成员
访问权限
private
类访问权限只能在本类中访问,
缺省
包私有,只能在当前类的包中访问
protect
自类访问权限
同包可以访问,继承可以访问
public
全局公共访问权限
abstract
方法修饰为抽象方法,没有方法体,由子类实现
存在于抽象类和接口中
类修饰为抽象类,不能创建对象,可以包含普通方法,留给子类调用
成员变量
全局变量/字段(field)
类成员变量
使用static修饰的字段
实例成员变量
默认有初始值
作用域
整个类中都有效
局部变量
除了成员变量都是局部变量
方法内部的变量
方法的形参
代码块中的变量
没有初始值,必须先初始化才能使用
作用域
从定义位置开始到紧随结束为止
方法的覆盖(overload)
子类和父类有冲突,父类某一行为不符合子类特征时。
签名和参数必须相同
和重载(override)的区别
内部类
实例内部类
静态内部类
局部内部类
匿名内部类
package
语法
编译
javac -d . 包名.java
运行
java 包名.类名
常用包
lang:核心
util:工具
net:网络编程
io:输入输出
text
sql
awt
swing
位置
所有代码之前第一行
javabean规范
接口
定义
多个抽象类的抽象
定义一组抽象方法,标示某一类事务必须具有的功能
语法
修饰符 interface 接口名{}
实现
implements
类和接口之间为实现关系
特点
接口中没有构造器,不能实例化、
接口中定义的成员变量,实质是全局静态常量
接口中定义的方法都是公共的抽象方法
接口中定义的类都是公共的静态内部类
接口只能继承接口,而且可以多继承
分类
常量接口
标志接口
和抽象类区别
相同点
都位于继承顶端,用于被其他实现或继承
都不能实例化
都可以定义抽象方法,子类或实现都要覆盖这些抽象方法
不同点
接口中没有构造器,抽象类中有构造器
抽象类和包含抽象方法和普通方法,接口只包含抽象方法(java8之前)
一个类只能继承一个直接父类为单继承,接口是多继承可以实现多个接口;
基础
进制
二进制
十进制
八进制
十六进制
转换
十进制和二进制
十进制和八进制
二进制和十六进制
码制
正数
原码、反码、补码相同
负数
原码:最高位为符号位,1负数,0正数
反码:将连同符号位的所有位都取反
补码:反码的最后一位加一,符号位不能改变
三大平台
javaSE标准平台:桌面版程序
javaEE企业平台:BS领域
javaME微型平台:开发移动设备和嵌入设备
跨平台
源码编译为字节码文件(.class文件)
jvm:java虚拟机,用来在不同的平台识别不同的字节码文件,jvm不能跨平台
java模型
jdk:java的开发工具
jre:java的运行环境
安装
安装JDK
目录说明
bin:存放java操作工具
db:测试数据库
incluce:头文件
jre:java运行环境
lib:java运行和依赖库
srcZIP:java源代码
配置PATH
语法
命令
编译阶段=》javac 源代码;生产字节码文件
执行阶段=》java 字节码文件 ;运行java
配置CLASSPATH;配置jvm运行class文件的默认路径,或者用命令-d指定目录
规则
1、严格区分大小写
2、一个原文件中可以定义多个类,但只能有一个public类,源文件包含了public类,则源文件名必须和public类同名
3、一个源文件包含N各类,编译后产生N份字节码文件,每一个类都生产单独的class文件,且字节码和对应的类名相同。
4、一个类运行,必须要拥有main方法。
类型
变量
特点
1、占据内存中某一块存储区域
2、该区域有自己的名称和类型
3、可以重复使用
分类
成员变量/字段(Field):直接定义在类的{}中的变量(方法外),定义成员变量都使用static修饰
局部变量:除开成员变量的变量
作用域
成员变量在所定义的类中起作用;局部变量从定义的地方开始到紧更着的结束花括号中使用
常量
定义:程序中固定不变的值
分类
(1)字面值常量:直接给出的值,也被成为直接量
(2)final定义的变量
数据类型
基本类型
数值型
整数
byte:1个字节
short:2个字节
int:4个字节
long:8个字节
小数
float:4个字节
double:8个字节
字符型char:2个字节
布尔型boolean:1位
引用类型
类
接口
数组
常用引用类型
String字符串类型
特殊类型
bigdecimal:任意精度
溢出问题:数据超出数据类型的范围
类型转换
自动类型转换
小范围数据赋值给大范围数据类型,系统自动完成类型转换
强制类型转换
大范围类型转到小范围类型;赋值符号前加语句(类型);
表达式
表达式类型自动提升
所有byte、short、charz自动提升到int类型,表达式的最终类型提升到表达式中类型最高的类型
运算符
赋值
比较
三元运算
逻辑运算
与:位与和短路与
或:
非
位操作符
优先级
流程语句
顺序结构
选择结构
switch语句适用于多个整型数进行匹配判断,if根据bool值来判断,表达式结构任意,
循环结构
控制语句
特殊语句
import
方法
格式
方法签名:方法名称+参数列表(参数类型+参数的个数+参数的顺序)
同一个类中方法的签名是唯一的
修饰符 返回值类型 方法名( 形参) { 函数体 }
位置:java中最小的程序单元是类,方法之间是兄弟关系
修饰符
static
有:使用方法所在类的名称+点操作符+方法名,表示方法属于类
无:使用方法所在类的对象调用
静态上下文中不能引用非静态方法。
public
修饰方法的访问权限
重载
同一个类中,某方法允许存在一个以上的同名方法,只要参数列表不同即可
作用:屏蔽了同一功能的方法由于参数不同造成方法名称不同
判断
同一个类中,方法名相同
方法的参数列表不同(参数类型、参数个数、参数顺序 )
递归
参数传递
基本数据类型
引用类型
数组
定义
元素类型[] 数组名;
元素类型 数组名[];
数组必须先初始化才能使用
动态初始化
指定长度,值由系统决定
int[] arrName = new int[元素长度]
静态初始化
指定初始值,长度由系统决定
int[] strName=new int[]{ 元素1****元素n }
数组一旦初始化成功,数组中的元素个数就已经固定,不能更改。
数组元素的类型可以是自定义的类型
内存分析
堆内开辟空间,存储数据
将堆内存地址赋值给变量
堆中内存空间没有被引用,就会被回收
操作
常见异常
空指针异常:数组没有初始化,而直接操作数组
越界异常:数组操作索引超出范围
多维数组
语法
forEach
方法可变参数
设计模式
模板模式
在父类的一个方法中定义一个总体算法的骨架,
而将某一些步骤延迟到子类中来
而将某一些步骤延迟到子类中来
this
表示当前对象
主要存在与构造器(当前创建的对象)和方法中(谁调用就是谁)
当一个对象创建后,jvm会分配一个引用自身的引用this
0 条评论
下一页