黑马程序员技术交流社区

标题: 哪位大神能给我来个深刻的讲解那 [打印本页]

作者: zhuhaoming    时间: 2015-8-31 12:45
标题: 哪位大神能给我来个深刻的讲解那
这是乍滴了 ,老师写的代码都看不懂了.看来这块又点重学了...........
class Demo2_Final {
        public static void main(String[] args) {
                final int num = 10;
                //num = 20;
                System.out.println(num);

                final Person p = new Person("张三",23);
                //p = new Person("李四",24);
                p.setName("李四");
                p.setAge(24);

                System.out.println(p.getName() + "..." + p.getAge());

                method(10);
                method(20);
        }

        public static void method(final int x) {
                System.out.println(x);
        }
}
/*
* A:案例演示
        * 方法内部或者方法声明上都演示一下(了解)

        * 基本类型,是值不能被改变
        * 引用类型,是地址值不能被改变,对象中的属性可以改变
*/

class Person {
        private String name;                        //姓名
        private int age;                                //年龄

        public Person(){}                                //空参构造

        public Person(String name,int age) {
                this.name = name;
                this.age = age;
        }

        public void setName(String name) {        //设置姓名
                this.name = name;
        }

        public String getName() {                //获取姓名
                return name;
        }

        public void setAge(int age) {        //设置年龄
                this.age = age;
        }

        public int getAge() {                        //获取年龄
                return age;
        }
}


作者: 不想睡    时间: 2015-8-31 15:14
先打印10,之后换行打印李四,24,之后再换行打印10,再换行打印20,这里会导致报错的代码都注释掉了
首先final int num = 10;  被final修饰后,变量num就成为常量了,如果修改其值,比如 //num = 20;这段,打印的时候就会报错
其次final Person p = new Person("张三",23); Person p是引用类型,被final 修饰后地址值就不能发生改变了,但是对象的属性值可以发生改变,所以 //p = new Person("李四",24);这段代码会报错,因为p的地址值会发生改变,而p.setName("李四");和 p.setAge(24);就不会报错,所以打印结果是李四,24
method(10); 这段代码,它将值传过去后打印,打印完之后method这个方法就就弹栈了, 所以跟之后method(20);没有影响




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2