Java中用到的一些基本概念
2016-04-29 20:21
232 查看
super关键字
如果一个类没有无参构造方法,那么这个类的子类的构造方法必须显示的调用super(参数),否则默认调用super(),super()是指基类的无参构造方法,而基类没有无参构造方法,那么如此会导致错误。Java中静态代码块
static { 静态代码块 }
静态代码块中的内容,仅在在类加载的时候执行且只执行一次。
经过测试发现,工程下的类,仅在用到的时候加载,不用是不会加载的,跟import没有关系。
Java中基本数据类型所占的字节数
char,2字节byte,1字节
short,2字节
int,4字节
long,8字节
float,4字节
double,8字节
boolean,理论上1/8字节,即1位,实际可能用一个字节的空间存
Java中抽象类与接口的区别
抽象类可以有普通方法,可以没有抽象方法,接口中只能有抽象方法。抽象类由子类继承实现,且该子类只能继承这一个抽象类,即抽象类只能被单继承,接口由类实现,且该类可以实现多个接口,即接口可以实现被多继承。
抽象类中的抽象方法可以是public,protected和默认,接口中只能是public抽象方法,且默认就是public。
Java的命名规范
类名,单词首字母大写。方法名,除第一个单词,其余单词首字母大写,且第一个单词尽量用动词。
成员变量,m开头,其余单词首字母大写,若是控件,结尾标明控件名的简写,不要用下划线。
局部变量,除第一个单词,其余单词首字母大写,尽量见名知意,尽量简单,避免使用下划线,因为下划线在JVM内部有特殊含义。
常量,全部大写,多个单词用下划线间隔。
Android中XML布局文件的名字,全部小写,多个单词用下划线间隔。
Android中XML布局文件中的id,全部小写,多个单词用下划线间隔。
在没有局部变量覆盖的前提下,引用成员变量不用刻意的添加this
Java的自动类型提升
表达式中的byte,short,char类型默认会被自动转成int类型来进行计算若存在一个数字为long,则转为long
若存在一个数字为float,则转为float
若存在一个数字为double,则转为double
如,a = b + c
表达式是指b + c,b和c会进行自动类型提升,a不会,保持原类型
若a,b,c中存在long,float或double,会自动提升到long,float或double,这就是正常的算术表达式用最高精度来计算了
若b,c均用用final修饰了,b和c不会进行自动类型提升
System.exit(0)后,程序就此结束,后面的语句不会再执行,包括finally中的语句。
int i, j; int i = 0, j; int i, j = 0; int i = 0, j = 0; 不可以 int i = j = 0;
二维数组
int[][] a = new int[5][6]; 可以int[][] a = new int[][]{}; 可以int[][] a = new int[5][]; 不可以int[][] a = new int[5][6]{}; 不可以int[][] a = new int[5][]{}; 不可以int[][] a = new int[][6];
将a看成一维数组,由此数组a的长度,a.length为5,按行存。
a[0],a[1],a[2],a[3],a[4],对应一维数组a的五个元素,这五个元素为一维数组类型。
一维数组a[0]的长度,a[0].length为6。
a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5],对应数组一维a[0]的六个元素,这六个元素为int类型。
Java的运算符举例
移位运算符被移位的数据必须是int型,且必须是二进制,数据在内存本身实际就是存的二进制,由此我们可以直接对一个整型数据进行移位操作,对于带符号的int数据,高位全部用符号位填充后,再开始移位,正数用0填充,负数用1填充。
<<,左移位运算符, 如a = a << 2,a左移2位,a左移出的高位直接丢弃,低位补0,二进制左移1位,实际就是 * 2,左移2位,就是 * 2的2次方。
注意,必须是a = a << 2,不能只是a << 2,否则出错。
>>,右移位运算符,如a = a >> 2,a右移2位,a右移出的低位直接丢弃,高位用符号位填充,正数填充0,负数填充1,二进制右移1位,实际就是 / 2,丢弃余数,前提是有效位还存在,正数无限右移的结果为0,负数无限右移的结果为-1,注意,负数在内存用补码表示,除符号位,全部取反 + 1为原码。
>>>,无符号右移位运算符,移位是高位全部补0.
位运算符
参与运算的数据必须是int型,且必须是二进制。
&,按位与运算符,对应位相与。
|,按位或运算符,对应位相或。
~,按位非运算符,每一位取反。
^,按位异或运算符,对应位异或操作,同0,异1,a^b^b结果为a,即一个数被同一个数异或两次,结果不变。
注意,必须是c = a & b,不能只是a & b,不然出错。
条件运算符
?:,如exp1 ? exp2 :exp3,exp1的结果必须是boolean,不能是0或1,为true,结果为exp2的值,为false,结果为exp3的值。
instanceof运算符
对象 instanceof 类,如果对象是类创建的,子类也可以,返回true。
Java类的成员被访问的几种可能与访问修饰符
类内访问,被本类内的成员访问,这个必然可以。继承访问,该成员被另一个类继承,被另一个类内的成员访问。
类外访问,在另一个类中,创建该类的对象,然后用该类的对象调用该类的成员,这个不一定。
A类的protected成员,可以被子类B继承,并在子类B内被继承访问,若A类和B类在同一个包中,那么B类内部可以使用A类的对象,来类外调用A类的protected成员。
java的访问修饰符,按照权限递增为private,default,protected,public。
private,不可继承,仅类内访问,实际可以继承,只是继承了没法访问。
default,同一包中可以被继承,当然也可以被继承访问,类外访问,前提都是同一包。
protected,可以被继承访问,同一包中可以类外访问。
public,全部权限。
java的方法被继承的时候可以被重写,重写的时候方法的权限可以被扩大,但是不可以被缩小,通常protected方法被继承的时候,会被重写为public,以使其具备不同包中的类,能类外访问的权限。
类A中有若干方法,用于完成一个流程,如生命周期的各个环节,类A的生命周期只能由类A自己控制,如此这些生命周期方法不能被类外访问,但是类A要可以被继承扩展,如Activity,由此这些生命周期方法为protected,类A的流程方法为public,可以被类外访问,流程方法内部通过protected方法完成流程,由此类外通过执行流程方法达到访问protected方法的目的。
final修饰的属性为常量,不可变。
final修饰的方法不可被重写。
final修饰的类不可被继承。
java的可变参数列表,public void say(String… 变量名){}
String… 变量名就等价于String[] 变量名,不确定长度的数组,且可变参数列表必须是参数列表的最后一个参数,可变参数列表可以直接接受一个数组。
实际基类的私有成员也被子类继承了,只是子类无法访问而已,如子类继承了基类的公共方法,而基类的公共方法会访问基类的私有成员,由此子类继承的基类的私有成员实际是为子类继承的基类的公共成员服务的。
相关文章推荐
- Spring与Quartz的整合实现定时任务调度
- java文件拷贝类
- 改变myeclipse背景颜色
- 调用第三方api之图灵机器人
- Java应用调优指南之-工具篇
- Java mail学习之邮件基础
- spring和mybatis整合的dao两种开放方式
- JAVA模拟post请求
- java排序之归并排序
- (34)Spring Boot的启动器Starter详解【从零开始学Spring Boot】
- Struts2之Crud综合实例
- java .bat批处理(java cmd命令)
- 二叉查找树BST----java实现
- Java 内部类的一些总结
- Java中日期的几种常见操作 —— 取值、转换、加减、比较
- 面向对象的六大原则
- 20145313张雪纯 《Java程序设计》第9周学习总结
- java排序之堆排序
- 图片裁剪缩略处理小工具类
- Java使用poi操作cexel