1)JAVA创建对象时,会启用称为堆的内存区域,此区域的不同指出在于特使可以回收垃圾的堆。java会根据对象的大小来分配这个堆。当发觉内存不够时开始回收标记为不可利用的对象。
2)JAVA是面向对象,但是有时候需要一些全局变量,这时的全局变量也是保存在类中的,只不过加了public/static/final这样的字段。
3)对象的引用:对象并不是装载在变量中,变量只是引用,可以想成一个有按钮的指向类的遥控器,类是对象的蓝图
4)JAVA的强类型:主要不要将大杯子的水倒进小杯子中,及时可以盛下,编译器也会报错
5)数组的定义 String s =new String()------String[] ss=new String[3] -------同样,声明一个对象数组:Obj[] ob = new Obj[3];略有不同 Obj[0] = new Obj();//定义一个引用
6)数据的封装:对于私有变量和公有函数的封装,以达到隐藏数据的目的,调用要用set和get,这样可以先检查要传进来的参数是否符合要求
7)实例变量(instance variable)都有默认值,boolean为false,数值为0,对象为null(比如String),局部变量(localValue)没有初始值
9)利用oop思维想问题:找出类应该做的事情-找出实例变量和方法-伪码-类
10)for的加强版 for(type index: array){} type必须和array的type相同 index 在每次遍历时会赋值。
11)ArrayList是对象,array是数组
12)import和include(c)不一样,增加import并不能使程序变慢
13)了解多态的一个好例子
14)大部分继承层次深度不会都为1到2级,这样便于记忆理解。继承重写的方法必须参数同,返回参数同,并且不能降低方法的存取权限
15)重载版overload的方法与继承不同,重载要求不同的参数,重载只是恰好名字相同而已,但不允许只有返回参数不同的overload,与多态和继承无关。
16)抽象类表明一定要被extend,抽象方法表明一定要被实现,抽象方法没有方法体。抽象方法必须存在在抽象类中,所以抽象类可以有非抽象方法
17)有一种类,无需实例变量值,也无需实例这个类既可以用到方法,因为这些方法都是静态的,比如Math.random(),静态的方法不能使用实例变量,比如main函数为静态的,虽然在类中,但不能使用类中的变量,因为此变量在堆上,需要有对象引用;同样不能调用非静态的方法。静态变量是类共享,而不是对象共享。比如Math.PI,当然,Math.PI除了是static所有共享操作外,还是final不可修改的,即为常量(常量应该大写).static 的变量、函数不会在堆上。
18)final的意思是不能修改:final int size=3;不能被修改;final void calc(){};不能被覆盖;final class MyMostPerferClass();不能被继承
19)String.format()从java5后增加的,可以解决大多字符串显示、数字显示、日期显示的问题,非常有用,同样有用的是java.util.Calendar()这个类。但Calendar是一个抽象类,抽象类的实例 Calendar.getInstance()
20)静态的方法无法调用非静态的变量(上面说过),所以构造函数不可能为static
21)final定义在class上面,那么class里面所有的function都为final了,不需要再标识。
22)static变量的初始化在前,构造函数的调用在后
23)输入输出:
写文件用到的几个类: BufferedWriter/File/FileWriter 人/货物/购物栏 读文件用到的几个类BufferedReader/File/FileReader
PrintWrite/File专门写入String
保存文件用到的几个类:FileInputStream ObjectInputStream 写:FileOutputStream(流) ObjectOutputStream(写入工具),类必须为serilizable