java的作用域在编程的时候经常会遇到,而我经常会搞不清楚这个
问题,所以在家的这几天回忆一下过去不知道的每个小知识点
变量的值域;
package 基础;
/**
* 作用域的范围
*
* @author Administrator
*
*/
public class zuoyongyu {
public static void main(String[] args) {
zuoyongyu demo = new zuoyongyu();
// 定义变量
int x = 2;
System.out.println(" int x =" + x);
demo.count(x);
// 调用Count的方法后再打印,局部变量的范围是所在方法的范围,一旦离开这个方法作用域就消失
System.out.println("xx =" + x);
}
// 将变量的值传到方法中来,重新赋值,并打印
public void count(int x) {
x = 10;
System.out.println("x =" + x);
}
}
运行结果:
int x =2
x =10
xx =2
int x = 2;等价于C语言的全部变量,x = 10;等价于C语言的局部变量
JAVA没有全局变量, 局部变量只在所在的范围有用,
2,Object类强制转型的问题
package 基础;
/**
* Object类的强制转换
*
* @author Administrator
*
* 当一个类没有显示扩展的是其他类,默认的还Object类,所有对象
* 都是Object的多态形式,
*/
public class Demo {
public static void main(String[] args) {
//创建对象
Demo demo = new Demo();
//字符串赋值
String name = "pen";
//字符串赋给Object
Object obj = name;
System.out.println(name==obj);//引用的同一个对象所有为true
//将Object赋给字符串,需要强制转型,在对象流中经常会遇到
name = (String) obj;
}
}
3,泛型
泛型的子类继承;
在JAVA中子类的继承一般使用extends继承父类,或者是implements某些接口
Number n = new Integer(12);Integer是Number的子类
这是向上转型,但是泛型有点变化
List<String> list = new ArrayLsit<String>();//定义一个队列装字符串类型的
List<Object> lo= list;
第一行代码是正确的,第二行代码list<String>赋值给List<Object>,是错误的,在泛型中不可以这样做
List<String> list1 = new ArrayLsit<String>();
List<Integer> list2 = new ArrayLsit<Integer>();
list1 = list2;//错误
list2 = list1;//错误
通配符:
在泛型中进场会遇到不知道泛型的类型,需要最后才知道,这时我们可以将其定义为
通配符,这样后面就好定义了
List<?> c = new ArrayList<Object>();
c.add(new Object());//编译出错
c.add(null);//这里不知道c的类型,所以不能再其中添加对象,唯一列外的就是null,它是所有类型的成员