10,7Java00

一、final 相关

final 用于声明属性、方法和类,分别表示属性一旦被分配内存空间就必须初始化并且以后不可变、方法一旦定义必须有实现代码并且子类里不可被覆盖、类一旦定义不能被定义为抽象类或是接口,因为不可被继承。 重点是【一旦被分配内存空间】。

你既可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test{
    public final int a = 1; // 在声明时初始化
 
    public Test(){
    }
}
也可以:
public class Test{
    public final int a;
 
    public Test(){
        a = 1; // 在构造函数里初始化
    }
}

为什么可以在构造函数里初始化呢?因为当类被加载进内存的时候,这个属性并没有给其分配内存空间,而只是定义了一个变量,只有当类被实例化的时候这个属性才被分配内存空间,而实例化的时候同时执行了构造函数,所以属性被初始化了,也就符合了当它被分配内存空间的时候就需要初始化,以后不再改变的条件。 所以:一般初始化时赋值,或者在构造函数里赋值。 再补充点 1.在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。 1.修饰类 当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。 在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。 2.修饰方法 下面这段话摘自《Java编程思想》第四版第143页: “使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“ 因此,如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。 注:类的private方法会隐式地被指定为final方法。 3.修饰变量 修饰变量是final用得最多的地方,也是本文接下来要重点阐述的内容。首先了解一下final变量的基本语法: 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。 举个例子: 上面的一段代码中,对变量i和obj的重新赋值都报错了。 4.final修饰的索引,对象不能改变,但是对象的内容可以改变。 例如: final A a = new A(); a.value = 2; 这样是可以的,但是如果再从新赋值a就报错了:a = new A(); endofline

二、浅谈Java中的对象和对象引用

对象的使用:

1
2
3
4
5
6
7
8
9
10
11
12
1.**赋值**
■**对象****名** **=** **对象名****;** **//****兼容:****同类或子****类!!!!!!!!!!!!!!!!!!**
■**ChoiceQuestion****cq1 =** **new** **ChoiceQuestion****(…);**
■**Question  q1 = cq1;**
■**ChoiceQuestion** **cq2 = q1****;** **//****ChoiceQuestion****  cq2 = (****ChoiceQuestion****)** **q1;**
■**Question q2 = new Question(…);** **//Question q2 = new** **ChoiceQuestion****(…);**
2.**访问成员变量**
■**实例变量:** **对象名****.****变量名** **//new** **int****\[\] {1,2,3}.length**
■**类变量:** **类****名****.****变量名** **//****Math.PI**
3.**访问成员方法**
■**实例方法:** **对象名****.****方法名****(****实参表****)** **//****q.getDescription****()**
■**类方法:** **类****名****.****方法名****(****实参表****)** **//****Math.random****()**

{}
在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然。今天我们就来一起了解一下对象和对象引用之间的区别和联系。 1.何谓对象? 在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一。要理解什么是对象,需要跟类一起结合起来理解。下面这段话引自《Java编程思想》中的一段原话: “按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,‘类’就是‘类型’的同义词。” 从这一句话就可以理解到对象的本质,简而言之,它就是类的实例,比如所有的人统称为“人类”,这里的“人类”就是一个类(物种的一种类型),而具体到每个人,比如张三这个人,它就是对象,就是“人类”的实例。 2.何谓对象引用? 我们先看一段话: “每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)。” 这段话来自于《Java编程思想》,很显然,从这段话可以看出对象和对象引用不是一回事,是两个完全不同的概念。举个例子,我们通常会用下面这一行代码来创建一个对象: 1 Person person = new Person(“张三”); 有人会说,这里的person是一个对象,是Person类的一个实例。 也有人会说,这里的person并不是真正的对象,而是指向所创建的对象的引用。 到底哪种说法是对的?我们先不急着纠结哪种说法是对的,再看两行代码: 1 2 Person person; person = new Person(“张三”); 这两行代码实现的功能和上面的一行代码是完全一样的。大家都知道,在Java中new是用来在堆上创建对象用的,如果person是一个对象的话,那么第二行为何还要通过new来创建对象呢?由此可见,person并不是所创建的对象,是什么?上面的一段话说的很清楚,“操纵的标识符实际是指向一个对象的引用”,也就是说person是一个引用,是指向一个可以指向Person类的对象的引用。真正创建对象的语句是右边的new Person(“张三”);

  再看一个例子:
Person person;
person = new Person(“张三”);
person = new Person(“李四”);
  这里让person先指向了“张三”这个对象,然后又指向了“李四”这个对象。也就是说,Person person,这句话只是声明了一个Person类的引用,它可以指向任何Person类的实例。这个道理就和下面这段代码一样:

int a;
a=2;
a=3;
  这里先声明了一个int类型的变量a,先对a赋值为2,后面又赋值为3.也就是说int类型的变量a,可以让它的值为2,也可以为3,只要是合法的int类型的数值即可。

也就是说,一个引用可以指向多个对象,而一个对象可不可以被多个引用所指呢?答案当然是可以的。 比如:

Person person1 = new Person(“张三”);
Person person2 = person1;
  person1和person2都指向了“张三”这个对象。

关于对象和对象引用的区别和联系暂时就讲这么多了,感兴趣的朋友可以查阅相关文档和资料。

作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

①**封装(****Encapsulation****)** ②**继承(****Inheritance****)** ③**多态(****Polymorphism****)**     &左值引用(常量,静态!)   与  &&  右值引用 (存在一会就消失的重载,copy!)
(っ•̀ω•́)っ✎⁾⁾ 坚持技术学习、内容输出与分享,您的支持将鼓励我继续创作!(*/ω\*)
( • ̀ω•́ )✧如有疑问或需要技术讨论,请留言或发邮件到 aclearzhang@qq.com.(*・ω< ) 
  • 本文作者:: AClearZhang
  • 本文链接:: 127.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!