版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pickers/article/details/79251884
前言:这篇总结是基于head first java整理而来,本人接触java已有一段时间,但是由于本人后来选择了嵌入式,导致java全部忘干净了,基本j2se语法应该看了三四遍,甚至学习过培训视频,对于后台服务器像jsp,servlet也弄过,之前花费长达一个多月学习并做了个简单的购物商城,当时并没有用spring,springboot,structs,mybatis,hibernate等框架,知识简单的基于jsp显示,servlet处理,利用mvc三层架构,tomcat+mysql弄的一个简单的商城。
一:java类和对象
1. java中的所有方法或者变量都在类里面,因为java是面向对象的语言。
2 .一个工程只能有一个main函数
3. while(ture);这个TRUE必须是布尔类型,不像其他语言的用整形代替来判断。
4 对象是类的实现,类相当于一个模板,对象相当于一个类的实例化。
5 java所有的都是类,包含main的那个类是测试类,是整个工程的入口。
6 对象在堆上创建,但是这个堆是可回收的,有java回收机制,之后会详细叙述。
7 不同类的相同方法可以抽象为一个父类,子类继承父类的方法和变量,子类也可重写父类方法,之 后会详细 介绍。
8 相比c面向过程和汇编(基本就是顺序执行代码的),java这种面向对象是代码模块化,一个类可以多次使用, 方便管理,而且编译之后基本不用多做改动,现在比较大的c工程一般都是面向过程的,即使不同的方法分 别放在不同的头文件和cpp文件里,但是从某些方面来说,管理很不好管理。
二:对象变量引用和数据变量
1 常识
3、全局区(静态区)(static)— 全局变量和
静态变量
的存储是放在一块的,初始化的
全局变量
和静态变量在一块区域, 未初始化的 全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
4、文字常量区 — 常量字符串就是放在这里的,程序结束后由系统释放 。
5、程序代码区 — 存放函数体的二进制代码。
2 数据变量
数据变量有六种,每种都对应不同的字节数,他们的变量名是地址,变量值就是实际对应的值。
3引用变量
之前和数据变量类似,不同的是,变量值是一个字节序值,指向位于堆里的对象,具体字节序数目由JVM规定,本身引用还是存储在
栈上的。但是相同的JVM的引用字节数是相同的,不同JVM不同,所以可能会出现某种虚拟机的引用大于另一种引用的情况。还有就是说
申明了一个引用对象,这个对象只能引用为相同的类型,但可以引用相同类型的不同实例化,但假若被final关键词修饰之后,就只能引用
固定类型的固定对象了。
还有就是引用的大小是不能被计算的。。
如果引用变量没有指向,默认为null。
4 补充:
变量名是给编译器看的,编译器根据变量是局部还是全局分配内存地址或栈空间,所谓的变量名在内 存中不存在,操作时转换成地址数存放在寄存器中了。其实可以理解为是符号表起到了连接作用。全局变 量和静态变量包括数组默认初始化为0,局部变量默认初始化为乱的。
5 数组
数组是一个对象,不管是数据类型数组或者是引用类型数组,地址在栈里,引用到堆里的数据。
三 继承多态和一些关键词
继承 extends
子类继承父类的变量和方法,并且子类对父类的方法可以进行重写,即覆盖,同时,子
类也 可以仅仅添加父类方法中的一些行为,可使用super关键词来引用父类的行为。
同时父类也可以对子类的继承内容进行限定,即权限设置
private:被此方法修饰,子类无法继承父类
public:被此方法修饰,子类可以继承父类
用final修饰这个类表示此类不可被继承
用final修饰这个方法表示此方法不可被重写
多态
父类对象引用指向子类对象。
java中所有的类都继承自Object,Object对象是非抽象的,如果一个object类型的引用,
编译器会自动让他只能实现object本身的方法,因为java需要安全类型检测,比如
狗不会说人话等等。
多态实现的技术:动态绑定,是指在执行期间判断所引用对象的实际类型,根据其实际
的类型调用其相应的方法
接口 interface
接口不可被实例化
接口里的所有方法都是抽象的
接口可以继承接口
抽象 abstract
抽象类不可被实例化,含有抽象方法的类必定为抽象类,抽象类可不含抽象方法,但这
样毫无意义。
静态变量 静态变量必须初始化,有两种初始化方式,一种是直接复制,一种是在类似static{}里面赋
值。
使用事项:
1)静态函数初始化在于构造函数之前,类具体被加载的时间是由java虚拟机管控的,一般是
在初始化时加载。具体关于类的加载之后会详细介绍。
2)静态变量只会初始化一次,而且会在该类静态方法之前,可用在统计某个类被调用的次
数上。
3)静态方法不能包含非静态的成员变量,因为静态方法调用时,这个成员变量还不存。
4)非静态方法可以调用成员变量
5)访问静态方法和静态变量时,可用类名.变量的形式,也可new对象访问,但这样毫无意
义。
6)构造方法不能被标记为静态的。
final
1)final修饰的变量不能被修改
2)final修饰的方法不能被重写
3)final修饰的类不能被继承
关于常量:一把用public static final int PI=11;这种形式,变量名大写。
关于异常:finally忽视return的优先级,会在try catch finally都执行玩才会执行其中的finally
四 文件网络集合与泛型
1)Serializable
序列化,序列化其实只是个接口标记,实现序列化的所有子类皆可实现序列化,序列化后的对象可以直接写到文件中保存。静态变量
不会被序列化。
2)transient 瞬时 修饰的变量表示这个变量不会被序列化。
3)关于文件操作
FileReader/FileWriter都是没有缓冲区的,直接进行操作的流,可用其他的流进行封装达到快速读取的效果。
五 注意点
局部变量:声明在方法里面,一定要被初始化。
实例变量:声明在类里面方法外面,在java中,默认的实例变量是有初始值的0,false或是null。
加强版for循环 for(int i:b)其中‘:’类似in
数组与arrayList
Same;对象都存储在堆上。
Different:数组元素可读但不可删除和增加数组长度。而ArrayList可以。
JDK5.0之后,arraylist可以参数化了
ArratList<String> a=new ArrayList<String>();
ArratList a=new ArrayList();