访问控制
封装:将数据封装到类的内部,将算法封装到方法中。
封装结果:存在但不可见
修饰符:
public:任何位置可见,修饰属性,类,方法,内部类,跨包访问类。需要使用import导入。
protected:当前包中可见,子类中可见。只可以修饰类的成员,只能在类体中使用,包括:属性,方法,内部类。
default:当前包内可见,没有任何修饰词,在项目中很少用。
private:仅在类内部可见。修饰类的成员:属性,方法,内部类。
###
默认类(包内类)的访问范围:当前包内部可见,不能在其他包中访问,类的访问受限。
在企业项目中建议:所有类都是公用类。封装的类使用内部类。
Java文件规则:
1)一个java源文件中可以有多个类,但只能有一个共用类,其他类只能是默认类(包中类)而且java的文件名一定与公用类类名一致,如果没有共用类,可以和任意一个类名一致。
2)一般建议:一个文件一个公用类!一般不在一个文件中写多个类
私有方法不能被继承,也不能重写。
static:静态的,只能在类内部使用,可以修饰:属性,方法,内部类静态代码块。
静态修饰的成员:属于类级别的成员,是全体类实例共享的资源。
静态属性:只有一份,全体实例共享,类似于全局变量。
静态方法:属于类的方法,使用类名直接调用,不需要创建对象,而且静态方法中没有隐含参数this,不能访问当前对象资源。
静态代码块:在类的加载期间执行,只执行一次。(普通代码块,在创建对象时候执行,类似于构造器的作用)
final:最终的,终态,可以修饰:类,方法,变量(属性,局部变量)
final的类:不能再继承
final的方法:不能再重写
final的方法和类,阻止了动态代理模式!动态代理模式广泛的应用再Spring,Hibernate Struts2,企业编程规范:不允许使用final的方法和类!
final的变量:只能初始化一次,不能再修改
数组
#对象数组,是对象的元素不是基本类型,而是引用类型。
例:Point[] ps = new Point[3];
ps[0] = new Point(1,2);
ps[1] = new Point(3,4);
ps[2] = new Point(5,6);
数组ps的每一个元素都是Point类型的引用,都将指向一个Point类型的对象。初始化对象数组时,要注意将其每一个元素进行实例化。
数组的复制与扩容
数组变量的赋值,是并不会复制数组对象,而是两个变量引用了同一个数组对象。
数组复制本质是创建了新数组,将原数组的内容复制过来。
扩容:创建新数组,新数组容量大于原数组,原数组内容复制到新数组,并且丢弃原数组
排序算法
熟练冒泡排序:比较相邻元素,大的向后交换
Arrays数组工具类
递归调用:方法中调用了方法本身
递归解决问题:简练只需考虑一层逻辑即可,一定要有结束条件。注意栈内存溢出问题。总之慎用递归。
二进制基础
16进制是2进制的简写,2进制4位对应16进制1位。
移位运算符