您的位置:首页 > 编程语言 > Java开发

java 基础知识2

2015-08-01 10:02 495 查看
Final 和static
1.      final类不能被继承,没有子类,final类中的方法默认是final的

2.      final方法不能被子类的方法覆盖,但可以被继承

3.      final成员变量表示常量,只能被赋值一次,复制后值不再改变

4.      final不能用于修饰构造方法

注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型方法默认是final类型的

Final类
不能被继承,final类中的方法没有机会被覆盖,默认是final的

final方法
如果一个类不允许子类覆盖某些方法,则可以把这个方法声明为final方法

使用final方法的原因:

1.      把方法锁定,防止任何继承类修改它的意义和实现

2.      高效,编译器在遇到调用final方法时会转入内嵌机制,大大提高执行效率

Final变量
Final修饰的变量有三种,静态变量、实例变量和局部变量,分别表示三种类型的常量

 Final参数

当函数参数为final类型时。可以读取该参数,但无法改变该参数的值

Public void test( final int i){
//i++; i是final类型的,值不允许改变的
}


Static
Static表示“全局”或静态的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是java语言中没有全局变量的概念

 

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说它不依赖于特定的实例,被类的所有实例共享。只要这个类被加载,java虚拟机就能根据类名在运行时数据区的方法区内定找到,因此static对象可以在它的任何对象创建之前访问,无需引用任何对象

用public 修饰的static成员变量和成员方法本质是全局变量和全局方法,

当声明它类的对象时,不生成static变量的副本,而是所有的实例共享同一final变量

Static变量前可以有private修饰,表示这个变量不能再其他类直接访问

1.      static 变量
类成员变量分为被static修身的变量,称为静态变量或类变量,没有被static修饰变量,叫实例变量区别:

对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态变量分配一次内存,在加载类的过程中王城静态变量的内存分配,可用类名直接访问,当然也可以通过对象来访问

对于实例变量,每创建一个实例都会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响

2.       静态方法
可以直接通过类名调用,任何的实例也都可以调用,静态方法不能用this和super关键字,不能直接访问不带static的成员变量和成员方法

因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract

3.       Static代码块
也叫静态代码块,是类中独立于类成员的static语句块,JVm加载类时会执行这些代码

数组
1.      数组中元素类型必须相同

2.      数组的长度一旦指定即不能改变

3.      数组中的值通过数组名和下表组合起来进行访问

数组类型变量的声明
int[] a = null,a1;//引用类型变量一定要指向一个对象
int b[]=null,b1;//b1是int类型的变量,b是int类型数组
//a = {1,2,3}  数组常量只能使用在初始化中
a = new int[]{1,2,3};//直接给数组元素初始化,a存储的是数组的首元素的内存地址
int[] c = {1,2,3};
a1 = new int[3];//创建元素并没有初始化

静态初始化和动态初始化
静态初始化也称数组的整体赋值

语法格式:

数据类型[] 数据名称 = {值1,值2,…….值n}

静态初始化必须和数组的声明位于同一行,即只能在声明数组的同时进行静态初始化

动态初始化。

只为数组指定长度,并在内存中申请空间

数据类型[] 数组名称 = new 数据类型[长度

方法(method)
在面向过程的语言中称作函数。在汇编语言中称作子程序,是一个代码功能块,实现某些特定功能

方法声明的语法格式:

访问控制符 [修饰符] 返回值类型方法名称(参数列表){

          方法体

}

1.      访问控制符

范围从大到小:public ,protected,无访问控制符,private

 

2.      修饰符可选。是为方法增加特定的语法功能

1)  Static  静态的

2)   Final 最终的

3)  Abstract 抽象的

4)  Synchronized  同步的

5)  Native 本地的

 

方法相同指方法名称和参数列表都相同

参数传递:
在参数传递时分为按值传递,按址传递

1.      按值传递(by value)

按值传递指每次传递参数时,把参数的原始数据拷贝一份新的,把新拷贝的数值传递到方法内部,在方法内部修改时,则修改拷贝出来的值而原始的值不发生改变

         说明:使用该方式传递的参数,参数原始的值不发生改变

八种基本数据类型和String

2.      按址传递(by address)

每次传递参数时,把参数在内存中的存储地址传递到方法内部,在方法内部通过存储地址对应存储区域的内容。当方法内部改变了参数值后,参数原始的值发生改变

除String之外的所有复合数据类型,包括数组、类和接口

java 只有值传递

可变长参数:
1.      定义:例如

Print(String… args){

}

2 调用

调用时可以给任意多个参数也可不给参数

3.      使用规则

(1)      调用方法时,如果能够和固定参数的方法匹配,也能与可变长参数的方法匹配,则选择固定参数的方法

(2)      如果要调用的方法可以和两个可变参数匹配,则出现错误

(3)      一个方法只能有一个可变参数,并且这个可变参数必须是该方法的最后一个参数

4,使用规范:

1)  避免带有变长参数的方法的重载

2)  避免使用null值和空值

覆写必须满足的条件:
1)      重写方法不能缩小访问权限

2)      参数列表必须与被重写方法相同(包括显示形式)

3)      返回类型必须与被重写方法相同或是其子类

4)      重写方法不能抛出新的异常或者超过了父类范围的异常,但可以抛出更少更有限的异常

迭代和递归区别:
递归是重复调用函数自身实现循环,迭代是函数内某段代码实现循环,而迭代与普通循环区别是:其循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值

public 
//public static void main(String...a){  正确
//public static void main(String.* a){  错误
//public static void main(String... a){ 正确
//public static void main(String[]... a){  编译通过
//public static void main(String... a[]){  错误
public static void main(){
System.out.println("cc");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java