经过昨天一天的适应课,小卷初步知道了JAVA是个什么样子,可是编码究竟是一种什么样神奇的体验,他还是充满了期待,满脑子都是别人快速敲击键盘,然后各种科技感慢慢的样子,今天,老师终于要开始教编码了。
老师先讲了如何安装环境,配置环境变量,创建java文件,演示了一个号称入门经典的“Hello World!”,再讲了写java中的关键字,命名规范等基础语法,枯燥得小卷都要打瞌睡了,这和脑中的科技感落差也太大了。
接着,老师开始介绍JAVA的八大基本数据类型,
基本数据类型
byte, char, short, int, long, float, double, boolean……
突然,老师重重的敲了下黑板,因为他发现大家都有些精力不集中了,小卷,你说说,为什么要定义这些数据类型呢?
呃……因为,可能是觉得分了类好管理吧……
正确的废话!老师严厉的说道:你们如果不打好基础,到时候都是稀里糊涂的用!
定义的基本数据类型就好比你们家橱柜里的各种碗和碟,有各种大小不同容量的碗,也有各种不同形状的餐具满足不同需求,如果不定义这么多类型能不能用呢?能用,但是不好用,你想想你盛饭一定不会想用汤盆或者沾水碟子,大概就是这个意思,所以一种数据类型就是和虚拟机约定好的一定的内存空间,所以,它跟我们的碗一样,装的东西多了就会溢出。
看看,他们卷起来了,纷纷秀肌肉!
哦!原来如此,每种类型都约定了他们的范围,用byte纪录,而一个byte有8个bit,所以数据类型其实就是一帮坏蛋到了内存这块新大陆,然后疯狂的圈地,各自标记自己的地盘。
8大类型是基本类型,那么bit就是基础的基础,八大类型是词汇,bit就是字母,八大类型是组织,bit就是细胞……
前文我们说到了计算机由电信号的高低电位把电信息转换成了数字信息,也就是这里的bit,所以bit的范围是0-1。
为什么一个byte是8个bit呢?
呃……因为8比较吉利!
啪!一颗粉笔头扔过来!吉利你个猪头,那是芯片的引脚数所致,所以我们通常说的32位,64位处理器就是芯片引脚数,他们都是建立在8的基础上的。
然后我们通过这些2进制数据转换的我们使用的8进制,10进制,16进制等数据形式。
所谓进制就是一种计量模式的计量范围,如:2进制最大承载是2,缝2进1,所以2进制看不到2,基数就是0和1;8进制最大承载是8,缝8进1,所以看不到8,基数就是0-7;10进制最大承载是10,缝10进1,所以你看不到10,基数就是0-9;……
byte 1字节8bit,取值10000000(-128)到 01111111(127)
short 2字节16bit, 取值10000000 00000000(-32768)到 01111111 11111111(32767)
int 4字节32bit, 取值-2^31 (-2,147,483,648)到 2^31-1(2,147,483,647)
long 8字节64bit,取值-2^63 (-9,223,372,036,854,775,808)到 2^63-1(9,223,372,036,854,775,8087)
float 4字节32bit,由1位符号+8位指数+23位尾数
double 8字节64bit,由1位符号+11位指数+52位尾数
char 字符类型,16位unicode字符
boolean 由true和false构成
变量、类、方法、包
所谓变量,就是在内存中开辟的一块空间,并指定一个标识符用于标识这块空间,同时约定其类型和默认值。
int abc;
这个例子中,开辟的是一块4个字节的空间,约定为int类型的数据,用abc来命名,事实上,对内存空间的标识是采用寄存器地址来标记,就好比你们家是北京路1号,他们家是南京路2号,但是编码中我们分别取了个友好的名字,张三家,李四家;
我们可以给变量赋初值,也可以不赋值,不赋值的时候实际上是有一个默认值的,数字型的是0,char的是'',boolean的是false,对象类型是null,至于什么是对象类型,后面再叙述。
变量有三类,静态变量,成员变量,局部变量、
静态变量是随着类初始化的时候开始,小命交给了类,而成员变量和局部变量的小命交给了对象。
类,顾名思义就是类型,是我们编码过程中用来描述一件事物的,但是描述的只是事物的类型而并非事物本身,如果简单理解,就好比国家的国标文件规定了馒头必须是方形的由小麦粉发酵而制作成的东西,但是馒头的国标并不能吃,不是实实在在的馒头,但是如果你仔细阅读了馒头的国标,你能根据它做出一个真正的馒头来,而且必须是方形的!方形的!方形的!重要的事情说三遍。
public class FangxingMantou {}
比如上述的就是一个类的编写格式,public叫访问权限,申明了方形馒头这个国标文件是大家都可以看到的,class说明了这是一个类型,FangxingMantou是这个类型的名词,{}是这个类型的作用域,括号内的信息是属于这个类型的。
访问权限有public protected default private
public:允许跨包访问的;
protected:允许同包下的以及其他包的子类访问的(毕竟是亲骨肉,走到哪里都挂念);
default:包内可访问的,包外连子类也不能访问,在家的儿子可以,出去入赘别人家的儿子就当没有生过;
private:私有的,只有自己可以访问(连自己儿子也不给看),你就是这么无情!
方法,方法是存在于类中的,是用来描述以这个类为模板创造出来的对象具有什么能力,比如方形的馒头,它的能力有“释放香味”,“被吃”(感觉怪怪的),就可以编写一个释放香味的方法和一个被吃的方法
不难发现,类其实就是名词,而方法是动词
比如,我们想写代码表达这件事:打南边来了个喇嘛,腰里别着一个喇叭,打北边来了个哑巴,手里提着五斤塔嘛……后面就不管了
public class Lama{
public void bie(){
//喇嘛别着喇叭
}
}
public class Yaba{
public void ti(){
//哑巴提着塔嘛
}
}
是不是找到了点感觉?
小卷抬着头,眼睛滴溜溜的转:可是!这些类为什么么喜欢包啊,是LV还是古琦?
想什么呢!一个粉笔头飞了过来!
包,是用来管理类的,比如我们班有2个张三,要怎么区分呢?一个是家住北京一环的张三,一个是上海陆家嘴的张三,这个时候我们要区分他们,就要取很长的名字,北京的张三,上海的张三,那怎么办呢?简单!建两个文件夹把他们分开,在各自地盘里都是独一份的张三了。
包a-->张三
包b-->张三
一般,按惯例,我们都会用域名倒过来做包名,如:
net.csdn.a
如:net.csdn.a.Zhangsan.java,net.csdn.b.Zhangsan.java,这样即使两个同名的java文件也可以被区分开来。
运算符 =,==,+,-,*,/,>, >>,>>>,<,<<,&,&& ,|,||, !
=,赋值语句,如int i = 100;就是把100赋值给i这个变量
==,判断两端的值是否相等,如:if(1==2),那必然是false
+,-,*,/就是字面意思加减乘除,+在字符串中就是连字符
>,<分别是大于小于符号,和初中数学一个意思
>> 右移,<< 左移,所谓左移右移是按二进制来进行移位操作,如:10的二进制是1010,如果10>>2,那就是2进制的10等于2,如果10<<2就是2进制的101000等于40。
>>>为无符号右移,不管正数负数,右移后左边都补0。
& 与,1&0=0,1&1=1,0&0=0
&& 逻辑与,如if(a > 10 && b > 10),这种判断的时候,如果a=2,当判断到a>10为false的时候,后面补用判断
| 或,1&0=1,1&1=1,0&0=0
|| 逻辑或,道理同逻辑与
! 非,!true=false,!false=true
分支、循环
分支是代码逻辑运行的过程中,有几种选择的时候使用的逻辑。
如:老张的老婆告诉老张,你下班的时候买一斤包子,如果看到卖西瓜的,买一个!
这需要如何表达呢?老张是这么想的:
if(有卖西瓜的){
//买一个包子
}else{
//买一斤包子
}
结果回家,老张跪了一宿的键盘。
分支的几种方式:
if(条件1){
//这么这么做
}else if(条件2){
//那么那么做
}else if(条件...){
//不这么做也不那么做
}else{
//你到底要怎么做
}
if语句可以这么写
if(条件){
//没有elseif,也没有else
}
也可以这么写
if(条件){
//有elseif,没有else
}else if(条件){
}
用另外一个表达方式,switch
int i;
switch(i){
case 1:
//买一斤包子
break;
case 2:
//买一个包子
break;
default:
//直接跪键盘
break;
}
老张又跪了一次键盘,从此他再也不吃包子了
switch语句的case个数是不限的,default是可写可不写的。
讲到这里,老师突然问小卷,你算一下1+2+3+...+100,小卷说,这有何难,小学就学过啊, (1+100)*100/2=5050。
老师顿了一下,好吧,算你还记得,不过计算机并没有这么聪明。
那该怎么写?
int i = 1;
i = i+2;
i = i+3;
i = i+4;
...
这样写吗?答案当然是否,我们只要知道需要加多少次,我们就可以用循环解决。
int total = 0;
for(int i=1;i<=100;i++){
total = total + i;
}
也可以这么写
int total = 0;
int i = 1;
while(i<=100){
total = total + i;
}
也可以这么写
int total = 0;
int i = 1;
do{
total = total + i;
} while(i<=100)
这样写的区别是不管条件如何,一定会先执行一次。
上一篇:第一回 小卷入坑记



