共八种:
byte
(8位),short(16位),int(32位) 默认值 0
long
(64位) 默认值 0L
float
(32位) 默认值 0.0f
double
(64位) 默认值 0.0d
boolean
(1位) 默认值 false
char
(16位) 单一的Unicode字符
String
不是基本类型,引用类型的对象。
一个java文件中可包含多个类,但只能有一个public类,且其类名与文件名相同。
// 若str为null时,不会抛出异常,因短路,equals不执行
if(str != null && !str.equals(""))
// 若若str为null时,抛出NullPointerException异常,equals执行
if(str != null & !str.equals(""))
switch(expr)
中变量类型可以是byte
,short
,int
,char
及对应的包装类
从JavaSE 5 后可以是枚举类型
从JavaSE 7后可以支持String
不可用作long
,double
,float
,boolean
及其包装类上
short s1 = 1;
// s1 + 1运算时结果会转化为int类型
// int无法自得转为short
s1 = s1 + 1;
后者编译通过,因:
在Java中编译器会对s1 += 1
作特殊处理
该(Tyep) a + = b
操作等于(Type) a = (Type)(a + b)
所以已经转型过了,无错误。
final
修饰的变量,引用不能变,但引用的对象能变
<https://www.cnblogs.com/guweiwei/p/6594552.html>
补充: final关键字
==操作符专门用来比较两个变量的值是否相等, 也就是用于比较变量所对应的内存中所存
储的数值是否相同, 要比较两个基本类型的数据或两个引用变量是否相等, 只能用==操作
符。
如果一个变量指向的数据是对象类型的, 那么, 这时候涉及了两块内存, 对象本身占用一块
内存(堆内存) , 变量也占用一块内存, 例如 Objet obj = new Object();变量 obj 是一个内存,
new Object()是另一个内存, 此时, 变量 obj 所对应的内存中存储的数值就是对象占用的那块
内存的首地址。 对于指向对象类型的变量, 如果要比较两个变量是否指向同一个对象, 即要
看这两个变量所对应的内存中的数值是否相等, 这时候就需要用==操作符进行比较。
equals 方法是用于比较两个独立对象的内容是否相同, 就好比去比较两个人的长相是否相
同, 它比较的两个对象是独立的。 例如, 对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条 new 语句创建了两个对象, 然后用 a,b 这两个变量分别指向了其中一个对象, 这是两个
不同的对象, 它们的首地址是不同的, 即 a 和 b 中存储的数值是不相同的, 所以, 表达式
a==b 将返回 false, 而这两个对象中的内容是相同的, 所以, 表达式 a.equals(b)将返回 true。
语法定义上的区别:静态变量要用static
修饰,实例变量不用;
程序运行时的区别:静态变量在加载字节码文件时就会分配到空间,而实例变量要创建对象后才分配空间。
使用时的区别:静态变量通过类名.变量
调用,实例变量对象.变量
调用。
不可以,要调用非static方法必须要有对象,但调用static方法时可能还没有产生对象。
Integer
时int
的封装类,Integer
的默认值为null,int
的默认值为0
Integer
可区分0和null的情况,int
则不行
Integer
中还提供了多个与整数相关的方法。
Overload是方法重载,指同一类中可以有多个相同名称的方法,但参数不同,返回值可相同也可不同。
Override是方法重写,指子类在继承父类时,重写父类中的同名同参的方法,相当于将其方法内容覆盖。但子类只能抛出比父类更少的异常,或者父类的子异常。
Servlet 被服务器实例化后,容器运行其 init 方法, 请求到达时运行其 service 方法, service方法自动派遣运行与请求对应的 doXXX 方法(doGet, doPost) 等, 当服务器决定将实例销毁时候调用其 destroy方法。
抽象,封装,继承,多态
1.接口中所有的方法都是抽象的,而抽象类里既可以有抽象方法,也可有非抽象方法;
2.类可以实现多个接口,但只能继承一个抽象类;
3.抽象类可以在不提供接口方法的情况下实现接口;
4.接口中声明的变是默认是final的,抽象类可包含非final的变量;
5.接口和抽象类都不可以被实例化,但抽象类中若有main
方法的话是可被调用的。
1.继承Thread类;
2.实现Runnable接口;
3.可使用Executor框架来创建线程池
原文:https://www.cnblogs.com/flytree/p/11628289.html