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类型时。可以读取该参数,但无法改变该参数的值
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. 数组中的值通过数组名和下表组合起来进行访问
数组类型变量的声明
静态初始化和动态初始化
静态初始化也称数组的整体赋值
语法格式:
数据类型[] 数据名称 = {值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
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统