一切都是对象
1.类、对象、对象的引用的概念:
抽取同类实体的共同性,定义的一种数据类型称为类。 抽象的
类的一个具体实例称为对象。 具体的
对对象的操作称为引用。 通过使标识符指向数据来引用,这里的标识符类似于C语言中的指针。
UML中类的表示:类名、属性、数据成员、方法
2.类、对象的创建和对象的使用:
类的创建举例:
public class Dog{//ClassName
String color;
int age;//DataMember
void barking(){
}
void hungry(){
}//Method
}
对象的创建举例:
Dog myDog = new Dog();
使用new关键字
对象的操作举例:
myDog.age;
myDog.hungry();
3.对象的作用域:
在C、C++和Java中,作用域由花括号的位置决定:
{
int x = 12;//Only x available
{
int q = 96;//Both x&q avaliable
}
//Only x avaliable, q is "out of scope"
}
以下代码在C和C++中是合法的,但在Java中不能这样写,因为Java的设计者认为这样会导致程序混乱:
{
int x = 12;
{
int x = 96;
}
}
Java对象不具备和基本类型一样的生命周期:
{
String s = new String("a string");
}//End of scope
引用s的作用域消失了,但是s指向的String对象仍然占据着内存空间。在这个作用域之外,由于对它唯一的引用已经超出了作用域的范围,我们无法访问这个对象,但它并没有消失。垃圾处理器将会对它进行处理。
4.基本类型:
基本类型与Object类型的不同点:
存储位置不同:
char c = 'x';
Character c = new Character('x');
基本类型中c的值为‘x’,存储在栈(stack)中。
Object类型标识符c存储在栈中,但是数据’x’存储在堆(heap)中。栈中的c指向堆中的x,即c引用了x。
栈的访问速度快,但是不如堆存储灵活。
操作方法不同:
基本类型多用操作符对数据进行操作,Object类型多用method对数据操作。
基本类型中没有引用,直接赋值给变量。
Java的自动初始化只针对定义在类里的DataMember变量,方法里面的局部变量也不行。
public class Test {
static int x; //不初始化直接调用也可以
void increase() {
x++;
System.out.println(x);
}
考虑到基本类型特殊性带来的诸多不便,每个基本数据类型都对应一个包装器类。
BigInteger和BigDecimal大体属于包装器的范畴,但是二者没有对应的基本类型。不过,它们中包含的方法,提供的操作与对基本类型所能执行的操作类似。
5.基本类型易出现的错误:
默认小数一般为double类型,如果要用float定义变量,需要float a = 3.12f
不加f会报错
注意给变量赋值时,不要超过相应基本类型的取值范围
注意给变量赋值时,不要超过相应基本类型的取值范围
6.static关键字:
static关键字可以修饰成员变量和方法,使其从对象的所属,变为类的所属,即多个对象共享一个成员变量或者方法。
static若修饰成员变量,可以使多个对象共享一个成员变量。
static若修饰成员方法,最大的作用是可以通过类名.方法名的方式操作方法,不用new出对象。
7.注释:
普通的单行注释与多行注释不在Java输出结果中显示。
生成javadoc说明注释:
/**
*
*/
8.存储位置简介
寄存器:位于处理器内部,是最快的存储区。由于寄存器数量非常有限,所以需要按需分配。一般不能直接控制,也无法感受到它的存在。(C和C++允许向编译器建议寄存器的分配方式)。
堆栈:位于通用RAM(随机访问存储器)中,可以通过堆栈指针从处理器获得直接支持。是仅次于寄存器的快速有效的存储方式。创建程序时,为便于上下移动指针分配释放内存,系统必须知道存储在堆栈中变量确切的生命周期。这限制了程序的灵活性。
堆:一种位于RAM区通用的内存池。由于编译器不知道存储在堆中的数据要存活多长时间,所以在堆中分配存储具有很大的灵活性。但需要花费更多的时间。
常量存储:直接存放在代码的内部。
非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也会存在。