目录
学习目标:
- 一周掌握 Java 入门知识
学习内容:
- Java变量
学习产出:
变量有两种:primitive主数据类型和引用。
声明变量:
Java注重类型:为了让类型安全能够发挥作用,你必须声明所有变量的类型,指定他是个int类型或者dog类型。变量的两种:清晰的primitive主数据类型来保存基本类型的值。而对象引用保存的是对象的引用。
变量必须拥有类型 int age 变量必须要有名称
primitive主数据类型:
类型 位数 值域
boolean与char
boolean(jvm虚拟机决定)ture或false
char 16bits 0 到 65535
数值(带正负号)
intger
byte 8bits -128 到 127
shot 16bits -32,768 到 32,767
int 32bits -2,147,483,648(-2 ^ 31)和 2,147,483,647(2 ^ 31 -1)
long 64bits -9,223,372,036,854,775,808(-2^63) 和 9,223,372,036,854,775,807(2^63 -1)
浮点数
float 32bits 1.4E-45 到 3.4E+38
double 64bits ±4.9E-324 到 ±1.7976931348623157E308
bit(bits复数)
比特作为信息技术的最基本存储单位,非常小,但大名鼎鼎的比特币就是以此命名的,它的简写为小写字母“b”。
大家都知道,计算机是以二进制存储数据的,二进制的一位,就是 1 比特,也就是说,比特要么为 0 要么为 1。
Byte
通常来说,一个英文字符是一个字节,一个中文字符是两个字节。字节与比特的换算关系是:1 字节 = 8 比特。
在往上的单位就是 KB,并不是 1000 字节,因为计算机只认识二进制,因此是 2 的 10 次方,也就是 1024 个字节。
primitive主数据类型如同奶茶的杯子型号,它们的有不同大小,而每种大小都有个名称,如
“小杯”、“中杯”、“大杯”、“桶”。而在Java中primitive主数据类型也有不同大小与名称。如
“byte”、“shot”、“int”、“long”。每种杯子都能装载数值,就像你会说”我要大杯的珍珠奶茶“,就像告诉编译器:”请给int变量保存数值为100“,有些许差异的是------你得为杯子命名。我就叫他”蜡笔小新一号“。你无法用小杯子装大值,其实也可以,但会溢位损失某些信息,好比奶茶的奶盖铺满溢出了,int i = 24; byte b = x;// 小新:不行!!! 为什么不行其实你知,我知。但别对编译器抱有期待。
primitive主数据类型的声明与赋值声明:
int x; double d = 3.14;
x =18; char c = ‘ f ’;
byte b = 89; int i = x;
boolean ishappy = true; float f =52.1f
命名规则:
避开关键字(keyword)!
你已经知道变量必须拥有类型和名称,你也知道什么是primitive主数据类型。那你知道命名的方法吗?你需要遵守以下规则:
- 名称必须以字母,下划线(_)或$符号开头,不能用数字开头!
- 除了第一个字符之外,后面可以用数字!
- 只要符合上述两条规则,你可以随意命名,但要避开Java关键字!
控制dog对象:
你已经知道要如何声明primitive主数据类型变量并赋值给它。但非primitive主数据类型变量又如何处理?
- 事实上没有对象变量这样东西的存在。
- 只有引用(reference)到对象的变量。
- 对象引用的变量只是存取对象的方法。
- 它并不是对象的的容器,而是类似指向对象指针。或者可以说是地址
Dog d = new dog(); 把dog的引用变量相像成是dog的遥控器,你可以通过它来执行工作
d.bark(); 把点(.) 想像成遥控器
对象只存在与可回收的堆上!
虽然primitive主数据类型变量是以字节代表实际的变量值,但对象引用变量却是以字节来表示取得对象的方法。使用圆点运算符(.)来对引用对象表示:”取得圆点前面的对象,然后求出该对象在圆点后面的事物“。
Dog mydog = new Dog( )
要求Java虚拟机分配空间给引用变量,并将此变量命名位myDog。此引用变量将永远被固定位Dog类型。通俗来说,它是个控制Dog的遥控器,不会是Cat或蜡笔小新的控制器。
对象的声明、创建与赋值步骤 1 2 3 Dog mydog = new Dog( ) ; 1.声明一个引用变量mydog = new Dog( );
要求Java虚拟机分配空间给引用变量,并将此变量命名位myDog。此引用变量将永远被固定位Dog类型。通俗来说,它是个控制 Dog的遥控器,不会是Cat或蜡笔小新的控制器
2.创建对象 Dog mydog = new Dog( ) ; 要求Java虚拟机提供分配堆空间给新建立的Dog对象
3.连接对象与引用 mydog = new Dog( ) ; 将新的Dog赋值给myDog这个引用变量。换言之就是设定遥控器。
在垃圾堆上的生活
Book b = new book(); Book c = new book(); 声明两个Book的引用变量并创建两个 个Book对象,然后将Book对象赋值给引用变量。现在这两个Book对象生活在堆上。引用数:2 , 对象数:2
Book d = c;b = c;声明新的Book的引用变量,但不创建新的Book对象,而将变量c的值给变量d。这代表”将c的 字节组拷贝给变量d“。c与d引用到同一对象。相同值的两份拷贝。一台电视有两个遥控器引用数:3对象数:2
c = b;把变量b的值给变量c。现在你知道这代表什么了。变量b的字节组合被拷贝一份给c。b与c两者都引用相同的对象。引用数:3 对象数:2
堆空间
堆上的生与死
Book b = new book(); Book c = new book(); 声明两个Book的引用变量并创建两个 Book对象,然后将Book对象赋值给引 用变量。现在这两个Book对象生活在 堆上。引用数:2 ,对象数:2
b = c; 把变量c的值给变量b。两者都带有相同的值对象1被抛弃且能够作为垃圾收集器(GC)。引用数:2 ,对象数:2 ,被抛弃对象数:1,对象1已经没有引用,编程无法存取的。
c = null;将null值赋予c。这将代表它不在引用任何事物,但还是个可以被指定引用其他Book的引用变量。 对象2还引用到,所以不能够作为垃圾收集器(GC)。 作用中的引用数:1,null引用数 :1,可存取对象数:1,被抛弃对象数:1
数组犹如杯架
1.声明一个int数组变量。数组变量是数组对象的遥控器。int [ ] nums; 2.创建大小为7的数组,并将它赋值给之前声明为int [ ]的变量nums。nums = new int [ 5 ]; 3.赋予int数组的每一个元素一个int值。要清楚在int数组中的每一个元素皆为int类型的变量。
创建Dog数组
1.声明一个Dog数组变量。 Dog[ ] pets; 2.创建大小为5的Dog数组,并赋值给前面所声明出的。Dog[ ]类型变量pets。psts = new Dog[ ];
3 .创建新Dog对象并将它们 赋值数组的元素 。记得Dog数组中带有Dog的引用变量。我们还需要Dog象!psts [ 0 ] = new Dog(); psts [ 1 ] = new Dog();
要点
- 变量有两种:primitive主数据类型和引用
- 变量的声明必须有类型和名称。
- primitive主数据类型变量值是该值的字节所表示的。
- 引用变量的值代表位于堆之对象的存取方法。
- 引用变量如同遥控器,对引用变量使用圆点运算符可以如同按下遥控器按钮般地存取它的方法或实例变量。
- 没有引用到任何对象的引用变量的值为nul值。
- 数组一定是个对象,不管所声明的元素是否为primitive主数据类型,并且没有primitive主数据类型的数组,只有装载primitive主数据类型的数组。