This():当前类的对象,super父类对象。
Super():在子类访问父类的成员和行为,必须受类继承规则的约束
而this他代表当前对象,当然所有的资源都可以访问.
在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.
而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.
Ø Public:不同包、同一包、类内都可用
Ø Private:类内
Ø Protected: 不同包的子类、同一包、类内都可用
Ø 不写时:同一包内、类内
* * * * *
* * * *
* * *
* *
*
代码如下:
1
2
3
4
5
6
7
8
9
10
|
public
class
Print {
public
static
void
main(String[] args) {
for
(
int
i =
0
; i <
5
; i++){
for
(
int
j =
5
; j > i; j--) {
System.out.print(
"*"
);
}
System.out.println();
}
}
}
|
java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。
垃圾回收机制 垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,则次对象适合进行垃圾回收
用break; return 方法。
序列化:
处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:
将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
可以。如果这个类的修饰符是public,其类名与文件名必须相同。
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
快速排序的伪代码。
方法的
重写Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。
重载Overloading 一个类多个方法,名称相同,参数个数类型不同。
两者都是Java多态性的不同表现。
Overloaded的方法是可以改变返回值的类型。
1
2
3
4
5
6
7
8
|
1
,
public
class
Ctest()
{
Public
static
void
main()
{
System.out.prinln(
8
+
8
+”
88
”+
8
+
8
);
}
}
168888
|
属性常量
方法不可以overridding
类不可以继承
答:父类:
1
2
3
4
5
6
7
8
|
package
test;
public
class
FatherClass
{
public
FatherClass()
{
System.out.println(
"FatherClassCreate"
);
}
}
|
子类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package
test;
import
test.FatherClass;
public
class
ChildClass
extends
FatherClass
{
public
ChildClass()
{
System.out.println(
"ChildClass Create"
);
}
public
static
void
main(String[] args)
{
FatherClass fc =
new
FatherClass();
ChildClass cc =
new
ChildClass();
}
}
|
输出结果:
C:>java test.ChildClass
FatherClass Create
FatherClass Create
ChildClass Create
答:示例代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package
test;
public
class
OuterClass
{
private
class
InterClass
{
Public Interlass()
{
System.out.println(
"InterClass Create"
);
}
}
public
OuterClass()
{
InterClass ic =
new
InterClass();
System.out.println(
"OuterClassCreate"
);
}
public
static
void
main(String[] args)
{
OuterClass oc =
new
OuterClass();
}
}
|
输出结果:
C:>java test/OuterClass
InterClass Create
OuterClass Create
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
package
test;
import
java.util.*;
class
InsertSort{
ArrayList al;
public
InsertSort(
int
num,
int
mod)
{
al =
new
ArrayList(num);
Random rand =
new
Random();
System.out.println(
"The ArrayList Sort Before:"
);
for
(
int
i=
0
;i {
al.add(
new
Integer(Math.abs(rand.nextInt()) % mod +
1
));
System.out.println(
"al["
+i+
"]="
+al.get(i));
}
}
public
void
SortIt()
{
Integer tempInt;
int
MaxSize=
1
;
for
(
int
i=
1
;i {
tempInt = (Integer)al.remove(i);
if
(tempInt.intValue()>=((Integer)al.get(MaxSize-
1
)).intValue())
{
al.add(MaxSize,tempInt);
MaxSize++;
System.out.println(al.toString());
}
else
{
for
(
int
j=
0
;j {
if
(((Integer)al.get(j)).intValue()>=tempInt.intValue())
{
al.add(j,tempInt);
MaxSize++;
System.out.println(al.toString());
break
;
}
}
}
}
System.out.println(
"The ArrayList Sort After:"
);
for
(
int
i=
0
;i {
System.out.println(
"al["
+i+
"]="
+al.get(i));
}
}
public
static
void
main(String[] args)
{
InsertSort is =
new
InsertSort(
10
,
100
);
is.SortIt();
}
}
|
JAVA类实现序例化的方法是实现java.io.Serializable接口
Collection框架中实现比较要实现Comparable 接口和 Comparator 接口
答:代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
static
void
split(String source,
int
num)
throws
Exception
{
int
k=
0
;
String temp=
""
;
for
(
int
i =
0
; i
{
byte
[]b=(source.charAt(i)+
""
).getBytes();
k=k+b.length;
if
(k>num)
{
break
;
}
temp=temp+source.charAt(i);
}
System.out.println(temp);
}
|
1
2
3
4
5
6
7
|
public
class
YesterdayCurrent{
public
void
main(String[] args){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -
1
);
System.out.println(cal.getTime());
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public
int
getNum(){
int
i = -
1
;
try
{
String stri=
""
;
BufferedReader in =
new
BufferedReader(
new
FileReader(f));
while
((stri=in.readLine())!=
null
){
i = Integer.parseInt(stri.trim());
}
in.close();
}
catch
(Exception e){
e.printStackTrace();
}
return
i;
}
public
void
setNum(){
int
i = getNum();
i++;
try
{
PrintWriter out=
new
PrintWriter(
new
BufferedWriter(newFileWriter(f,
false
)));
out.write(String.valueOf(i));
//可能是编码的原因,如果直接写入int的话,将出现java编码和windows编码的混乱,因此此处写入的是String
out.close() ;
}
catch
(Exception e){
e.printStackTrace();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class
A{
static
{
System.out.print(
"1"
);
}
public
A(){
System.out.print(
"2"
);
}
}
class
B
extends
A{
static
{
System.out.print(
"a"
);
}
public
B(){
System.out.print(
"b"
);
}
}
public
class
Hello{
public
static
void
main(String[] ars){
A ab =
new
B();
//执行到此处,结果: 1a2b
ab =
new
B();
//执行到此处,结果: 1a2b2b
}
}
|
注:类的static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造
(1)接口可以被多重implements,抽象类只能被单一extends
(2)接口只有定义,抽象类可以有定义和实现
(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)
当功能需要累积时用抽象类,不需要累积时用接口。
通过类(Class对象),可以得出当前类的fields、method、construtor、interface、superClass、modified等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring中一切都是返射、struts、hibernate都是通过类的返射进行开发的。
java.lang.Class
java.lang.refrection.Method
java.lang.refrection.Field
java.lang.refrection.Constructor
java.lang.refrection.Modifier
java.lang.refrection.Interface
对象.getClass()
类.class或Integer.type(int) Integer.class(java.lang.Integer)
Class.forName();
产生一个Class数组,说明方法的参数
通过Class对象及方法参数得到Method
通过method.invoke(实例,参数值数组)唤醒方法
Integer.parseInt(“1234”)
Double.parseDouble(“123.2”)
1+””
1.0+””
double d=1256.22d;
d=d/100;
System.out.println(Math.round(d)*100);
Calendar c=Calendar.getInstance();
c.set(Calendar.YEAR,2004);
c.set(Calendar.MONTH,0);
c.set(Calendar.DAY_OF_MONTH,31);
System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+" "+c.get(Calendar.DAY_OF_MONTH));
Java.util.Date dat=new Date();
long now=dat.getTime();
当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。
取下一个月的第一天,下一个月的第一天-1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public
static
void
main(String[] args)
{
Calendarc=Calendar.getInstance();
c.set(Calendar.YEAR,
2004
);
c.set(Calendar.MONTH,
0
);
c.set(Calendar.DAY_OF_MONTH,
30
);
Calendarc1=(Calendar)c.clone();
System.out.println(c.get(Calendar.YEAR)+
" "
+(c.get(Calendar.MONTH)+
1
)+
" "
+c.get(Calendar.DAY_OF_MONTH));
c.add(Calendar.DAY_OF_MONTH,
1
);
if
(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))
{
System.out.println(
"是最后一天"
);
}
else
{
System.out.println(
"不是取后一天"
);
}
}
|
Import java.text. SimpleDateFormat;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-ddhh:mm:ss");
Date dat=new Date();
//把日期转化为字符串
String str=sdf.format(dat);
System.out.println(str);
//将字符串转化为日期
Java.util.Date d1=sdf.parse(“yyyy-mm-dd”);
String a=new String("中".getBytes("gb2312"),"iso-8859-1");
String a=new String("中".getBytes("iso-8859-1"));
New了一个,”XYZ”本来又是一个
两个
报错,应当是float f=3.4f
如果是float f=3(整数)正确
常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer
常用的包:java.lang java.awt java.io java.util java.sql javax.xmljavax.sevlet javax.ejb. java.net javax.faces
常用的接口: List Map Document NodeList EjbObject EjbHome SessionBean EntityBean
会。如:int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。
静态的多态:方法名相同,参数个数或类型不相同。(overloading)
动态的多态:
子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法
实现接口的实例传与接口的引用调用的实现类的方法。
动态内存
存放类实例
静态内存
类本身
垃圾收集主要针对的是动态内存,一般当内存不够用时会进行垃圾收集。
或通过System.gc()手动收集,但不保证一定执行。
static i = 10; //常量
class A a; a.i =10;//可变
静态方法可以调用静态变量。
实现方法可以调用静态变量、实例变量
不可以,如果其中包含对象的method();不能保证对象初始化.
Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。
Try:执行部分,产生异常
Catch:捕捉异常
Finally:不管有没有异常都执行
Throws:在方法声明处声明要抛出的异常,调用者必须对其进行处理。
Throw:抛出一个异常
在try中可以抛出异常,一般与声明的异常相同。
自定义异常要继承于Exception或Exception的子类
//相邻两个数比较,将最小或最大的放到后面,最后面数的不参与比较
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
public
class
BubbleSort {
private
static
int
al[] =
new
int
[
10
];
publicBubbleSort() {
al[
0
]=
2
;
al[
1
]=
3
;
al[
2
]=
23
;
al[
3
]=
45
;
al[
4
]=
1
;
al[
5
]=
67
;
al[
6
]=
23
;
al[
7
]=
80
;
al[
8
]=
35
;
al[
9
]=
72
;
}
public
static
void
main(String[] args) {
BubbleSort bs =
new
BubbleSort();
System.out.println(
"排序前:"
);
display(al);
for
(
int
i=
0
;i
for
(
int
j =
0
; j < al.length-i-
1
; j++) {
if
(al[j]>al[j+
1
]) {
swap(j,j+
1
);
}
}
}
System.out.println();
System.out.println(
"排序后:"
);
display(al);
}
private
static
void
display(
int
[] al2) {
for
(
int
i =
0
; i < al2.length; i++) {
System.out.print(al2[i]+
" "
);
}
}
private
static
void
swap(
int
i,
int
j) {
int
temp = al[i];
al[i]= al[j];
al[j] = temp;
}
}
|
String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。
StringBuffer:长度可变,可以将多个字符串值直接联合,效率高
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
public
class
Stack {
int
[] data;
int
maxSize;
int
top;
public
Stack(
int
maxSize) {
this
.maxSize = maxSize;
data =
new
int
[maxSize];
top = -
1
;
}
/**
* 依次加入数据
* @param data 要加入的数据
* @return 添加是否成功
*/
public
boolean
push(
int
data) {
if
(top+
1
== maxSize) {
System.out.println(
"栈已满!"
);
return
false
;
}
this
.data[++top] = data;
return
true
;
}
/**
* 从栈中取出数据
* @return 取出的数据
*/
public
int
pop()
throws
Exception{
if
(top==-
1
) {
throw
new
Exception(
"栈已空!"
);
}
return
this
.data[top--];
}
public
static
void
main(String[] args) throwsException {
Stack stack=
new
Stack(
1000
);
stack.push(
1
);
stack.push(
2
);
stack.push(
3
);
stack.push(
4
);
stack.push(
5
);
while
(stack.top>=
0
)
{
System.out.println(stack.pop());
}
}
}
|
数据的传送 增、删、改、查、constainsAll,可以存放不同类型的对象。
集合List 的遍历方法有:
Iterator:
Enumeration
For
Get
set
Collection的通用方法有:
Iterator()
Add()
Clear();
remove()
ArrayList Vector:以数组的方式存储,增、删慢,查、改快
ArrayList:线程不安全,速度快
Vector:线程安全,速度慢(synchoronized)
LikedList:以单链表的方式存储,增、删快,查、改慢
HashMap与Hashtable都实现的Map接口,HashTable线程安全,HashMap线程不安全。
Collection是集合的根接口,其下有set及list
Collections是集合的算法。
在比较时先调用hashCode方法,如果不相同,证明不相等。
如果相同,再调用equals方法,如果equals方法相同,证明相等,不相同,证明不相等。
==:主要用在基本数据类型及引用
Equals:主要是对象或对象引用的比较。
集合中是否包含某一个元素用contains来判断。
List,set继承于Collection
Map没有继承于Collection,其相对是独立的。
属于Collection类型的对象,可以通过构造函数将一个集合构造成另外一个集合。
1.抽象:
找共性,将共有的属性、方法放到父类中
2.继承:
子类继承于父类,具有父类的所有属性与方法,可以重用,也可以覆盖。
3.封装:
一个类包括多个属性及方法。
4. 多态性:
动态:
静态:
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
Int是基本数据类型,不是对象,占一个内存空间,没有方法。与其同类的有long,char,doble
Integer是封装类,具有方法及属性。与其同类的有Long,Double.Float
运行时异常:java JVM抛出的异常,代码中不用处理。
一般异常:用户抛出的异常,如果用throws 声明了,调用这个方法的代码必须对其处理。
&:与: 左边若为false右边还执行。
&&:短路与,左边若为false右边不执行。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
算符可以用来决定某对象的类是否实现了接口。
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。
堆是栈的一个组成元素
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型) short s1 = 1; s1 +=1;(可以正确编译)
Math.round(11.5)==12 Math.round(-11.5)==-11round方法返回与参数最接近的长整数,参数加1/2后求其floor.
java中的保留字,现在没有在java中使用。
ArithmeticException, ArrayStoreException, BufferOverflowException,BufferUnderflowException, CannotRedoException, CannotUndoException,ClassCastException, CMMException, ConcurrentModificationException,DOMException, EmptyStackException, IllegalArgumentException,IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,ImagingOpException, IndexOutOfBoundsException, MissingResourceException,NegativeArraySizeException, NoSuchElementException, NullPointerException,ProfileDataException, ProviderException, RasterFormatException,SecurityException, SystemException, UndeclaredThrowableException,UnmodifiableSetException, UnsupportedOperationException
一般异常:
IOException
FileNotFoundException
SqlException
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。任何抽象类都是实际类Object的子类。
都不能
数组没有length()这个方法,有length这个属性
String有length()这个方法.
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
String类是final类故不可以继承。
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string都不能作用于swtich。
会执行,在return前执行。
2 << 3
不对,有相同的hash code。
是引用传递
基本数据类型:值
对象: 引用
Cookie
Session
Hidden
url 重写
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singletoninstance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static SingletongetInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
原理
有错直接转到异常处理部分或向上抛出。
应用:
JAVA的异常就是错误,有两种一种是运行时,编码可以不用捕捉。一种是一般异常,如果throws声明了,必须进行处理。
优点:
程序员不用管内存,jvm自动完成,开发方便。运行优先非常低,程序无法清楚实例什么时候被消毁。
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于Reader Writer。在java.io包中还有许多其他的流,低层流与调层流,高层流主要是为了提高性能和使用方便。
启动一个线程是调用start()方法,启动线程并调用run方法。
线程是进程内的并发,没有自已内存空间,共享进程的,线程间的通信成本较低。
Java中的线程有四种状态分别是:运行、就绪、挂起、结束。
1
2
3
4
5
6
7
8
9
10
11
12
|
Extends Thread
Implements Runnable
同步
Public
synchronized
aa()
{
}
Public
void
cc(object aa)
{
|