1.Java中有两种数据类型:基本数据类型和引用数据类型
基本数据类有8种:byte, short, int, long, char, boolean, float, double
引用数据类型主要有:数组(类型)、类(类型)、接口(类型)、包装类型
2.为了存储数据,我们需要内存空间,内存空间的单元被称作变量,内存单元里所储存的数据称作变量的值
注1:内存空间的“单元”:这个单元的大小并非像数轴上的单位长度那样确定,它是灵活变化的
注2:变量这个内存空间指的是栈区的内存空间(规定),所以变量这块内存空间一定在栈区(变量的值存储在变量这块内存空间内)
注3:基本变量的值:非引用的数据(整数/小数/字符/布尔值)
注4:引用变量的值:引用
注5:要区分“引用的值”和“引用所指向的内存空间的数据“这两种数据
3.变量的声明:数据类型名 变量名;
(1)如int a = 1; int 是变量的数据类型;a是变量的名;1是变量的值。
(2)如A a = new A(); A是变量的数据类型;a是变量的名;new A()是在堆区创建了一个没有名字的对象并被分配内存空间并返回所分配内存空间的引用,这个引用指向了这个A类的对象,引用就是变量a的值;我们通过操纵变量a来操作这个A类的对象
1.基本类型的变量的声明:
(1)JVM会自动根据变量所属的基本类型为变量分配一定大小的内存空间,并且在给变量赋值时JVM会把数据存入变量这块内存空间内
(2)变量名既代表着变量这个内存空间内的数据的值,也代表了这个内存空间的地址;但对于基本数据类型,操纵“变量名”仅仅表示读写基本数据类型的变量的数据。
2.基本类型的变量的值:整数/小数/字符/布尔值
3.基本类型的变量的赋值:在变量这块内存空间内,抹去原有值、填充新赋值
1.引用类型的变量(又称引用变量)的声明
(1)只给引用变量分配保存引用的内存空间,未给变量分配保存“引用所指对象的内容”的内存空间
(2)数组类型变量的声明:
例int[ ] 数组类型变量的变量名;例double[ ] 数组类型变量的变量名;
例String[ ] 数组类型变量的变量名;例 类名[ ] 数组类型变量的变量名;
(3)类类型变量的声明:
把每一个类都当作是一种独立的数据类型(就像八种基本数据类型一样)来声明的变量,叫做类类型的变量。例People p1;(同理int a;)
(4)包装类型变量的声明:包装类类型名[ ] 包装类型变量的变量名;
2.引用类型的变量的值:
角度1:是“指向某一内存空间”的引用,所指向的内存空间内保存着一个值或一组值
角度2:是对象的“引用”,该引用指向的内存空间内保存的某一对象的内容
3.类类型的变量的赋值:类类型的变量在声明后,必须通过执行“new 类类型名( )”才能在堆区分配用于保存非引用的数据的内存空间。而只有声明并且执行了“new 类类型名( )”后,我们才能对变量所保存的引用所指向的内存空间的数据进行读写。
4. “new 类类型名( )”过程,称为对象的创建过程,又称对象实例化:
(1)new 类名() 如:new People();
(2)对象:大千世界万物皆可作为对象,编程中,对象由一组 属性+方法 构成
①属性:对象具有的各种特征。每个对象的每个属性都拥有特定值
②方法:对象所能执行的操作、所能具有的行为、所能发挥的功能
注1:“对象的属性”用类内方法外的变量来定义,“对象的功能、对象的操作”用方法来定义
注2:一类对象的属性和方法通常被封装到一个类中,属性和方法二者相辅相成,不能分割
(3)对象的内存分配:
①对象是被保存在堆中的,对象中保存的是对象的成员变量。编译器会给对象的成员变量默认值:数据型为0,boolean为false,引用类型为null。
②没有引用类型变量保存对象的引用时,对象会被JVM认为是垃圾、会被垃圾回收机制销毁。
(4)
①由这个过程知:“对象”本没有名字,但为了引用、使用这个对象(如读写这个对象的属性、调用这个对象的方法),所以每一个对象都需要一个名字。
②由于Java语言在设计时提供了“类类型名 类类型变量名= new 类类型名( ) ”的写法,并规定了“new 类类型名( )”的返回值是所创对象的引用,所以我们就不得不用一个类类型的保存引用的变量去接收所创对象的引用、所以我们只能使用对象的引用(即变量名)来间接地使用对象。
③所以默认情况下,我们直接称这个“变量”为所实例化的“对象”、称这个“类类型的变量名”为“对象名”。
(5)用“对象的引用”(即“引用变量的变量名”、即“new 类类型名( )”,也可称作对象名)来访问对象的成员变量与成员方法,都是用“.”运算符
①成员变量与成员方法统称为成员。
②创建对象后直接访问成员,并随之被销毁的对象称为匿名对象。
如:new People().name = "张三";
③创建对象后返回的引用被引用类型变量保存,使用“引用类型变量.成员”读写、调用成员;
如:People p1 = new People(); p1.name = "张三";
(6)例子
5.值传递与引用传递
(1)引用类型:方法传值时:"引用传递";引用变量间的“=”赋值:"引用传递"
(2)值传递:基本类型的传递都属于值传递。当把Java基本数据类型的变量作为入口参数传给方法时,传入的参数在方法体内变成了局部变量;这个局部变量是输入参数的一个拷贝,所有方法体内部的操作都是针对这个拷贝的操作,方法执行结束后,这个局部变量也就完成了它的使命,它不影响作为输入参数的变量。
6.总结
(1)对象是通过对象的引用变量来访问的,该变量存放的是对该对象的引用,而并非对象本身。
(2)一个类就是一种引用数据类型,该类类型的每一个变量都可以引用该类的一个实例、一个对象。
PS.
注:本文由H同志编写,欢迎批评指正、交流探讨