一、数据类型
定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。
分类:
基本数据类型:
数值型:
整数类型:byte、short、int、long
浮点类型:float、double
字符型:char
布尔型:boolean
引用数据类型:
类(class)、接口(interface)、数组(【】)
Java基本数据类型图
例:
(1)用最有效的方法计算2乘以8
2<<3(左移三位相当于乘以2的3次方,右移三位相当于除以2的3次方)
(2)Math.round(11.5)、Math.round(-11.5)等于多少
12、-11 (四舍五入的原理是在参数上加0.5然后进行向下取整)
(3)float f = 3.4是否正确
不正确;3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成 float f =3.4F;
(4)short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗
对于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 类型,因此 s1+1 运算结果也是 int型,需要强制转换类型才能赋值给 short 型。
而 short s1 = 1; s1 += 1;可以正确编译,因为 s1+= 1;相当于 s1 = (short(s1 + 1);其中有隐含的强制类型转换。
二、编码
Java语言采用Unicode编码标准,Unicode为每个字符制定了一个唯一的数值,因此在任何的语言,平台,程序都可以放心得使用
三、访问修饰符
定义:Java中可以使用访问修饰符来保护对类、变量、方法和构造方法的访问;Java支持四种不同的访问权限(public、private、protected、default)
分类:
public:对所有类可见;使用对象:类、接口、变量、方法
protected:对同一包内的类和所有子类可见,子类包括不同包中的子类;使用对象:变量、方法。注意不能修饰类(外部类)
default:在同一包内可见;使用对象:类、接口、变量、方法
private:在同一类内可见;使用对象:变量、方法;注意不能修饰类(外部类)
四、关键字
final:可用于修饰类、属性、方法
*被final修饰的类不能被继承
*被final修饰的方法不能被重写
*被final修饰的变量不能被改变,注意修饰的基本类型是常量,修饰引用类型不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的
final、finally、finalize区别
final可以修饰类、变量、方法,修饰的类不能被继承,修饰的方法不能被重写,修饰的基本类型是常量,不能被重新赋值
finally一般作用与try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码放在finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码
finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用。
this:this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
在Java中大致有三种用法:
1)普通的直接引用,this相当于是指向当前对象本身;
2)形参与成员名字重复,用this区分;
3)引用本类的构造函数
super:super也有三种用法
1)普通的直接引用,与this类似,super相当于是指向当前对象的父类的引用,这样就可以用super.xxx来引用父类成员;
2)子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分
3)引用父类构造函数
this和super异同:
1)引用构造函数时,super调用的是父类中的某一个构造函数,this调用的是本类中的另一种形式的构造函数;
2)super()和this()均需要放在构造方法内第一行;
3)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过;
4)this()和super()都指的是对象,所以均不可在static环境中使用,包括static变量、static方法、static语句块
5)从本质上讲,this是一个指向本对象的指针,而super是一个Java关键字
static
意义:1)创建独立于具体对象的域变量或者方法,以至于即使没有创建对象,也能使用属性和调用方法
2)形成静态代码块以优化程序性能,static代码块可以置于类中任何地方,类中可以有多个static块。在类初次被加载时,会按照顺序来执行每个static块,并且只会执行一次。
特点:1)被static修饰的变量或者方法是独立于该类的任何对象,即这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。
2)static修饰的部分只在类第一次加载时执行进行初始化,后面根据需要可以再次赋值;
3)static变量值在类加载时分配空间,以后创建类对象的时候不会重新分配。(可任意赋值)
4)static修饰的变量或方法优先于对象的存在,即类加载后即使没有创建对象也可以通过类名去访问;
应用场景:static是被类的实例对象所共享,因此如果某个成员变量是被所有对象所共享,就可以将其定义为静态变量
注意事项:1、静态只能访问静态;2、非静态既可以访问非静态也可以访问静态;
五、流程控制语句
break、continue、return的区别及作用
break:直接结束一个循环,跳出循环体;break以后的循环体中的语句不会继续执行,循环体外面的会执行。
continue:中止本次循环,继续下次循环;continue以后的循环体中的语句不会继续执行,下次循环继续执行,循环体外面的会执行。
return:return的功能是结束一个方法;一旦在循环体内执行return,将会结束该方法,循环自然也随之结束。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。
例题:在Java中如何跳出当前的多重嵌套循环?
可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环,如下:
public static void main(String[] args) {
ok:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.println("i=" + i + ",j=" + j);
if (j == 5) {
break ok;
}
}
}
}