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,它是所有类型的成员