sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态
依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只
有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提
供垃圾收集时的其他资源回收,例如关闭文件等。
Overload和Override的区别。
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如
果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个
类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载
(Overloading)。Overloaded的方法是可以改变返回值的类型
error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这
样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
java语言中有没有goto关键字?
其实goto这个词是C语言中的,goto语句通常与条件语句配合使用,可用来实现条件转移, 构成循环,跳出
环体等功能。而在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调
试程序都产生困难。但是在java语言中,goto这个词只是作为了保留字,还没有使用。那是因为java语言讲
究简单,方便。
JAVA的特点:
1简单易用、完全面向对象;
2与平台无关性、可扩展性强;
3可移植性高、支持分布式编程;
4健壮、安全可靠并性能优异;
5支持多线程开发技术
6支持动态开发。
Java编程规范
A、命名规定
包 :包名应该是小写的名词。如:package shipping.object
类:类名应该是名词,大小写混合,每个单词的首字母大写。如:class AccountBook
接口:接口名的大小写应该与类名一样。如:interface Account
方法:方法名应该动词,大小写混合,首字母小写。每个方法名中,以大写字母区分单词。限制使
用下划线。如:balanceAccount( )
变量:所有的变量应该是大小写混合,首字母小写。由大写字母区分单词。限制下划线的使用。
:currentCustomer
常数:基本类型常数应该是全部大写的由下划线区分的单词。如:HEAD_COUNT、MAXIMUM_SIZE、MIN_VALUE
B、程序主体结构规定
控制结构:所有语句,即使是一条语句,如果是某控制结构的一部分,都要使用大括号({ })括
起来。
空格:在任意行上只放置一条语句,并且使用2或4个空格缩进使代码更易读。
Java代码的位置:所有代码都存在于一个类里
例如:修饰符 class 类名
{
程序代码
}
注意:
Java是严格区分大小写的;
功能执行语句以(;)结束,这个分号必须是英文输入法中的(;);
连续的字符串不能换行,可使用(+)连接。
基本数据类型之间的兼容性
基本数据类型之间的转换:“小”的数据类型可以直接赋给“大”的数据类型。“大”的不能赋值给“小”
的数据类型(会出现编译错误)。
数据类型大小关系如下:
整数类:long >int > short > byte
浮点型:double >float
注意:
char 可以赋给long和int ,但是不能赋给short 和byte(编译错误) 。
char 可以赋给float和double。
当整数型常量被声明为long类型时,只能赋值给long型变量。
当整数型常量在0~65535之间时,可以被赋值给char型变量。
char型常量可以被赋值给整数类变量,只要整数变量的类型可以容纳char型文字常量所表示的数值。
浮点型常量默认为double型,而double型常量不能赋值给float型变量。
boolean与其他数据类型没有兼容性。
数据类型转换
1、自动类型转换(隐式类型转换)
需要同时满足两个条件:
1)、两种类型彼此兼容
2)、目标类型的取值范围要大于源类型
2、强制类型转换(显示类型转换)
当两种类型不兼容,或目标取值类型范围小于源类型时,自动类型转换无法进行,需要进行强制类型转换。
数据类型强制转换的格式为:
(数据类型)数据表达式;
例如:int i = 5; byte b = (byte)i;
变量的作用域
变量的作用域指一个变量起作用的范围,它决定了一个变量何时可以访问、何时不可以访问。Java中任何变
量的作用域都从该变量声明之后开始,并且只在该声明的语句块中使用,也就是该变量只能在声明它的那个
花括号{}中使用。
变量有分为成员变量和局部变量。
成员变量:在类中声明的变量称为成员变量,又叫全局变量。
使用范围:通常在类开始处声明,可在整个类中使用。
局部变量:在方法或块(块由两个花括号)中声明的变量称为局部变量。
使用范围:从声明处开始到它所在方法或块的结束处。
例:
{
int x = 4;
//这之间只有x可以访问
int y = 1;
//x和y可以访问
{
int z = 2;
//x、y、z都可以访问
z = 5;
}
x = 4;
//只有x和y可以访问,不可以访问z
}
Java代码的注释
作用:
1)、解释程序中某些部分的作用和功能,提高程序的可读性。
2)、可以使用注释暂时屏蔽某些语句,在程序调试时使用。
注释的形式:
1)、单行注释
int c = 10; //定义一个整型
2)、多行注释
/*
int c = 10; //定义一个整型
int x = 5;
*/
注意:/*…*/中可以嵌套”//”注释,但不能嵌套”/*…*/”。
3)、文档注释
“/** ...............*/”。
6、Java中的标识符
1)、变量,方法,类和对象的名称都是标识符,程序员需要标识和使用的东西都需要标识符。
2)、在Java语言里标识符以字母或下划线、$符号开头,后面字符可以是字母、数字、下划线、$符号。(其他符号都不能用来命名标识符)
3)、标识符对字母大小写非常敏感,必须区分大小写,但是没有长度限制。
4)、关键字不能用作标识符命名。
5)、标识符中不能包含空格。
6)、标识符是由Unicode字符组成的,因此可以使用汉字作为标识符(不推荐,尽量不用);
7、关键字
Java中一些赋以特定的含义、并用做专门用途的单词称为关键字,也可叫保留字。关键字不能作为普通的标识符使用。
所有Java关键字都是小写的,IF、THIS、NEW等都不是Java关键字;
goto和const虽然从未使用,但也作被为Java保留关键字;
8、java基本数据类型
基本数据类型包括:整型、浮点型、字符型、逻辑型(布尔型)。
数据类型
名称
位长
默认值
取值范围
布尔型
boolean
1
false
true,false
字节型
byte
8
0
-128~127
字符型
char
16
‘\u0000’
‘\u0000’~‘\uffff’
短整型
short
16
0
-32768~32767
整型
int
32
0
-2147483648~2147483647
长整型
long
64
0
-9223372036854775808~9223372036854775807
浮点型
float
32
0.0
±1.4E-45~±3.4028235E+38
双精度型
double
64
0.0
±4.9E-324~±1.7976931348623157E+308
注意:
整数类型数据用于描述一个一定大小范围内的整数。浮点类型数据用于描述一个范围很大的实数;
浮点类型数据有一定的精度限制。字符类型为char,它用于表示一个字符,使用单引号’在 Java中char类型为16字节,采用Unicode表示。
逻辑类型为boolean,它用于表示真和假;boolean类型只有两个值真(true), 假(false);boolean类型有自己的运算,不能参与其他数据类型之间的运算。
9、常量常量就是程序里持续不变的值,是不能改变的数据。
声明常量的格式如下:final类型 常量名[,常量名]=值;Java中的常量包括整型常量、浮点型常量、布尔常量、字符常量等。
整型常量:十进制:不能以0开头,多个0~9之间的数字
十六进制: 以0x或0X开头 0x8a 0X56d
八进制:必须以0开头 034 0376
长整型:必须以L结尾 87L 345L
浮点数常量:float型:2e3f 0.6f
double型:4.1d 1.23d
布尔常量:true 和 false
字符常量: ‘a’ ‘5’
字符串常量:“hello” “8698” “\nmain”
转义字符\n表示换行
null常量:null,表示对象的引用为空。
10、变量在java语言中存储一个数据信息,必须将它保存到一个变量中。
变量在使用前必须有定义,即有确定的类型和名称。
声明变量的语法:
类型 变量名[, 变量名][=初值];
例如:int i; char c; float a, b, c;
变量的声明有三种形式:1、声明变量。例如: int i;2、变量赋值。
在变量赋值之前要先声明变量。例如:int i; i=5;3、变量的初始化。例如:int i = 8;
String、 StringBuffer和StringBuilder的区别?
String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。
StringBuffer:长度可变,可以将多个字符串值直接联合,效率高,是线程安全的
StringBuiler:长度可变,可以将多个字符串值直接联合,效率更高,是线程不安全的
抽象类和接口的区别?
(1)接口可以被多重implements,抽象类只能被单一extends
(2)接口只有定义,抽象类可以有定义和实现
(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)
当功能需要累积时用抽象类,不需要累积时用接口。
|
|