J2SE 基础

 数据类型包括:

基本数据类型 :byte,short,int,long,double,float,char,boolean

引用数据类型:类、接口、枚举,数组

 

整数:

十进制、二进制、十六进制互相转化

 

把负整数转化成二进制:把对应的正整数转化成二进制,然后取反加一;

 

变量:

1.     局部变量在使用前一定要初始化或者赋值。

2.     变量分类:

局部变量-在方法中定义的变量。

实例变量

静态变量-  

 

Java的程序块可以定义在方法体内,类体内。程序块可以嵌套。在任何程序块内都可以声明变量。

程序块定义了一个作用域。

变量的作用域就是包含它,离它最近的程序块。

局部变量的可见性从声明之后到离开作用域之前都可见。

实例变量的可见性-实例方法中可见;静态方法中不可见。

局部变量在同一个作用域中不能有相同名称的变量;

局部变量可以和实例变量同名。

 

局部变量保存在栈中。 

 

类型转化:

l        整型字面量赋值给byte,short的时候,如果值没有超出byte或者short的范围,自动转换,否则编译错误。对浮点型字面量不适合。

l        整型和浮点型之间的转化。整型可以自动转化成浮点型。

 

自动提升原则:

a op b

1.       如果a,b中有一个是double型,那么另一个自动提升为double

2.       如果a,b中有一个float型,那么另一个自动提升为float

3.       如果a,b中有一个为int型,那么另一个自动提升为int

4.       如果a,b不是double,float,int,那么a,b自动提升为int

 

 

数组

l      数组变量存放在栈中,数组空间在堆中。

l      数组的长度。arrayName.length

l      数组是使用类来实现。

l      数组是引用类型。

l      数组中的元素会自动初始化。 

 

逻辑运算符:

& &&的区别:

如果左边表达式的值为false,&&不会再计算右边表达式的值,整个表达式的值为false;

 

|||的区别:

如果左边表达式的值为true,||不会再计算右边表达式的值,整个表达式的值为true;

 

 

1.       将一个int整数的各个字节颠倒形成一个新的int整数。

原来的int型整数:

b3

b2

b1

b0

 

 

 

 

             

新的int型整数:

b0

b1

b2

b3

 

 

2.        把十进制转化成十六进制。 

 

 

属性:变量:实例变量,静态变量(类变量)
行为:方法
方法操作变量。方法用来实现类的功能。 
类的成员:变量和方法 
类的功能:方法
Math.rand() 
type name (para-list) {
}
type:简单数据类型,数组,引用类型
name:动词,动名词组
param-list:以,分开的变量序列 
参数传递:
简单类型的变量:按值传递 copy 
构造函数:
1. 方法不能调用构造函数;构造函数可以调用方法。
2. 一个类的构造函数可以有多个。一个构造函数可以调用另外一个构造函数。
3. 不带参数的构造函数缺省构造函数。当类中没有任何构造函数时,系统缺省生成不带参数的构造函数。
4. 构造函数的调用 new构造函数。
5. 构造函数的匹配:首先匹配个数,然后匹配类型。类型完全相同或者符合自动类型转化的就通过,否则编译错误。
6. 构造函数不能继承。
 
this
1. 变量的隐藏:同名的局部变量隐藏了同名的实例变量。
2. 实现一个构造函数调用另外一个构造函数。 
 
重载
方法名相同,参数不同的方法,叫重载方法。与返回类型无关。 
1. 匹配方法名
2. 匹配参数 先看参数个数,再看类型(完全匹配,自动转化后匹配)
在编译的时候就决定的。静态的。
 
对象传递按引用传递,引用按值传递。
数组的传递等同于对象的传递。

 

对象从方法返回的传递同上。

 

访问控制

private 缺省 protected public

 

类的成员的可见性

 

存取修饰
同一类别
同一包
子类别
全局
private
OK

 

 

 

(default)
OK
OK

 

 

protected
OK
OK
OK

 

public
OK
OK
OK
OK

 

类的可见性

public:任何包中均可见。

缺省:同一包中可见。

 

 

class A {

 int i;

 

 void method(int i, A a) {

    System.out.println(“i = ” + i);

    System.out.println(“a.i = ” + a.i);

    //a = new A();

    i = 130;

    a.i = 500;

 }

 

 public static void main(String[] args) {

A a = new A();

a.i = 200;

int i = 100;

a.method(i,a);

System.out.println(“a.i = ” + a.i);

 }

}

  

 

类的成员:

变量:实例变量,静态变量

方法:实例方法,静态方法 

静态变量:归类所有,所有对象共享静态变量。――――类变量

实例变量:归对象所有。每个对象都有一个实例变量的拷贝。 

静态方法: 

静态块:

静态块不能访问实例变量。

非静态块可以访问静态变量。 

静态变量和静态块什么时候执行?

类在加载的时候初始化。只执行一次。

 

怎样访问静态变量和静态方法?

l        通过类名访问。 className.var/meth(…)

l        通过对象去访问 obj.var/meth(… 

 

单一模式:在系统中只能产生一个类的实例。 

final:

必须初始化

不能被修改。 

内部类:

1.     内部类可以直接访问外部类的成员。不受访问控制符限制。

2.     外部类不可以直接访问内部类的成员。不受访问控制符限制。

3.     内部类可以声明在包围类的任何程序块中。

4.     当一个内部类定义在包围类的方法中时,只能访问该方法的final常量。

  

GC

垃圾收集器

不需要程序员手工做。

什么对象才能被回收?

当一个对象不存在对它的引用时。。。。。。 

Finalize

 

动态栈:动态增长。

 

子类继承超类的变量和方法,但能否访问取决于访问控制符。但不继承构造函数。

 

super

l        调用超类的构造函数。必须位于第一行。超类中必须有对应的构造函数。

         如果子类的构造函数中没有显式地调用超类中的构造函数,那么缺省调用超类中不带参数的构造函数。

l        调用超类的成员。受制于访问控制符。 

 

替换原则:

超类的引用变量可以引用子类的对象。引用变量的类型决定了能访问哪些成员。

  

Is a / is a kondof 

单继承:一个子类只能有一个超类。 

 

类的层次:构造函数的调用。变量的初始化顺序:变量声明时的初始化优先于构造函数中变量的初始化。 

 

覆盖方法:

1.     子类中的方法和超类中的方法名称相同;

2.     参数相同(个数相同和类型相同)。

3.     子类中的方法的返回类型和超类中的方法的返回类型兼容:

u      两者完全相同;

u      子类中的方法的返回类型是超类中的方法返回类型的子类。

4.      如果超类中的方法是static,或者private,或者final那么一定不是覆盖方法。

5.     子类中的方法的可见性大于等于超类中的方法的可见性。 

构造函数不能被覆盖. 

 

 

 

 

类的成员的可见性:

 

private

缺省(包可见性)

protected

public

自己的类

Y

Y

Y

Y

同一包中的非子类

 

y

y

Y

同一包中的子类

 

y

y

y

不同包中的非子类

 

n

n

y

不同包中的子类

 

n

y

y

 

 

 

设计一个通用类,在类中定义一些通用的方法。通用的方法提供了标准的接口。然后子类去具体实现通用类中的通用方法。

-同一个接口(方法),有多种实现。实现了多态性。

 

具体类:实例化

抽象类:不能实例化

 

抽象方法:没有方法体的方法。

 

抽象类可以包含抽象方法,也可以不包含抽象方法。

如果一个类中有抽线方法,那么该类一定是抽象类。 

如果子类没有实现抽象类中的抽象方法,那么子类必须是抽象类。

 

abstract class Sort {

 public abstract void sort(int [] data);

}

 

class quickSort extends Sort {

 public void sort(int [] data){

   …….

}

 

}

 

final:

定义常量

阻止方法覆盖

阻止类的继承阻止方法覆盖。

 

 

 

 

Object

 

l        equals

缺省实现:如果两个对象的引用相等,则两个对象相等。

反射性:对称传递一致性  x.equals(null) => false;

  

instanceof :

o instanceof type: o是否是type的实例或者type的超类的实例。

l        hashCode:

一致性

如果a.equals(b) == true,那么a.hashCode() == b.hashCode()

如果a.equals(b)== true,那么a.hashCode()== b.hashCode()  

 

String:

String生成的字符串不允许改变。

字符串池。

给每个不同的字面量生成一个对象,放入字符串池中。

 

 StringBuffer:生成的字符串可以改变。

String,StringBuffer是线程安全的。StringBuilder不是线程安全的。StringBuilder效率最高。

 

静态常量也可以导入。Import static java.lang.Math.PI;

 

要使用不同包中的类、接口、枚举、异常,必须首先导入。Java.lang可以不导入。 

怎样解决冲突问题?

在同一个类中使用同名的类、接口。

1.     一个导入,另外一个使用全限定名称。

2.     都使用全限定名。   

如果在一个类中导入另外一个包中的类,同时本包中也存在相同的类,那么不会产生冲突,优先使用导入的类。

 

  程序中怎样使用已开发好的类?

l        使用.class文件。

l        使用打包的class文件。

bin> jar –cvf test.jar cn

       加入到库中。Properties -> java build path->libraries->add external jars

 

 

接口

如果一个类没有把接口中的所有方法都实现,那么该类必须声明为抽象类。

接口可以继承接口可以多重继承。

接口中的成员的可见性。public,缺省=>public

接口是一种引入类型,声明接口引用变量。接口变量可以引用实现了该接口的类的实例。

Clone

1.     覆盖Object中的 clone()方法。

2.     类要实现Cloneable接口。

3.     可以将Clone方法的可见性改为public

4.     clone()方法中首先调用super.Clone()

浅克隆:

Object.clone()的默认实现。只对简单变量和引用变量进行拷贝。

深克隆:

对包含的对象进行克隆。对String对象可以不深克隆,因为Stirng对象是不可改变的。 

 

接口和抽象类

共性:定义一组通用的方法。

不同点:接口是比抽象类更高层次的抽象。

        任何类都可以实现接口。抽象类只能由子类来继承,增加了耦合性。

        抽象类中可以声明变量,但接口中只能声明常量。

         抽象类中可以有具体方法,但接口中只能有抽象方法。

 

反射 reflection

JVM在运行时动态地分析、跟踪类和对象的能力

对象在运行的过程中用Class对象来描述。

:一个类对应唯一一个Class对象。 

 

 

 

Java中用2种方法处理异常:

1.在发生异常的地方直接处理;

2.将异常抛给调用者,让调用者处理。


Java异常可分为3种:
  (1)编译时异常:Java.lang.Exception
  (2)运行期异常:Java.lang.RuntimeException
  (3)错误:Java.lang.Error
Java.lang.Exception和Java.lang.Error继承自Java.lang.Throwable;
Java.lang.RuntimeException继承自Java.lang.Exception.

编译时异常: 
程序正确,但因为外在的环境条件不满足引发。
例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。

运行期异常: 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。

错误: 一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。  

JVM从调用栈中招出一个与异常类型匹配的catch(…)

完全匹配,子类异常可以匹配超类异常。

在嵌套异常捕获的时候,只要最近的捕获了,就不会再由外层的来捕获。 

 

两类:

检查异常-处理

未检查异常-不处理 RuntimeException及其子类。 

好处:

1.     每个方法可以向调用方抛异常。一层一层地抛出异常。与返回值的方法相比较。

2.     把错误处理代码和正常代码分开。

3.     异常是一个对象。可以从异常中把错误信息提出来。 

 

尽量使用异常,少用返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值