当前位置:首页 > java基本知识点2
作业:敲代码。看懂整个程序意思的前提下,背下来,然后敲代码。任何一个程序都不要照着敲。
第二章 基础语法 (+ 递归补充)
01_标识符_关键字_数据类型_1
【J2SE之基础语法】 【内容】:
标识符;关键字;java基本数据类型;运算符;表达式和语句; 分支;循环;方法;变量的作用域;递归调用。 【标识符】
—java对各种变量,方法和类等要素命名时使用的字符序列成为标识符。 (凡是自己可以起名字的地方都叫标识符,都遵循标识符的规则)
—java标识符命名规则:
标识符的第一个字符必须是下列字符之一: 字母 ,下划线(_) ,美元符号 ($) 标识符的第二个字符及后继字符必须是: 上述列表中的任意字符 ,数字字符 (0-9) java标识符大小写敏感,长度无限制。
【约定俗成】:java标识符选取应注意“见名知意”且不能与java语言的关键字重名。 【关键字】
——java中赋以特定的含义,用做专门用途的字符串称为关键字(Key)。 ——所有java关键字都是小写英文。
——goto和const虽然从未使用,但也被作为java关键字保留。
【java常量】
——常量:常量一旦被初始化以后就不可改变。
——java的常量值用字符串表示,区分为不同的数据类型。
如整型常量123,实型常量3.14,字符常量'a',逻辑常量ture false,字符串常量\——注意:区分字符常量和字符串常量
——注意:常量这个名词还会在另外的其他语境中表示值不可变的变量,参见final关键字。 【java变量】
——java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。 ——java程序中每一个变量都属于特定的数据类型,在使用时必须对其声明。
——从本质上讲,变量是内存中的一小块儿区域,使用变量名来访问这块区域。因此,每一个变量在使用前必须要先申请(声明),然后必须进行赋值(填充内容),才能使用。 ——java变量的分类
(1)被声明的位置划分:
局部变量—方法体内部定义的变量(包括形参),注:方法体内部是指与方法对应的大括号内部; 成员变量—方法体外部,类的内部定义的变量;
注意:类外面(与类对应的大括号外面)不能有变量的声明,即没有全局变量。
注意:变量的作用域的记法—凡是在大括号里面声明的变量,出了这个大括号,就没有人认识它了。 (2)所属的数据类型划分:
基本数据类型变量;引用数据类型变量(第三章)。 【java基本数据类型】
java中定义了4类8种数据类型 逻辑型—boolean 文本型—char
整数型—byte,short,int,long
浮点数型—float,double 【注意】:Q:靠什么方法来区分不同的数据类型呢?
A:内存里面占得小格的大小或者布局。
【逻辑型】Boolean
布尔类型适于逻辑运算,一般用于程序流程控制。
布尔类型数据只允许取值true和false,不可以0或非0的整数代替true和false,这点和C语言不同。 【字符型char】
—char型数据用来表示通常意义上“字符”。
—用字符常量为单引号括起来的单个字符。例如:char eChar='a';char cChar='中'。 —java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示。 例如:char c1='\a'
注意:Unicode是全球语言统一编码。 【问题】:字符编码问题。
A:每一种不同的文字在内存中是怎么表示的呢?记住,无论任何东西,在计算机里面都是010101,每一个0或者1叫做一位(Byte),一个字节占八位。但是不同的文字在计算机里面所占的位数是个数是不一样的。ASC码一般情况下占一个字节,一个字节是八位,最多能表示2的8次方,即256个字符,因此一个字节是不能表示完所有中国的字符的。这时用来表示中文或者其他国家的文字就出现了各种不同的编码方案。例如咱们国家表示中文,它的编码一般都叫做国标码,即GBK或GB2312,台湾的编码叫大五码。每个国家有各自的编码方案,Unicode是统一了全世界所有国家文字的一种编码方式。
—java语言中还允许使用转义字符'\\'来将其后的字符转变为其他的含义,例如:char c2='\\n'(//'\\n'代表换行符) 【补充】:2进制,10进制,16进制之间的转换 1101——1*1+0*2+1*4+1*8 13——1+4+8——1101 1101——D
02_标识符_关键字_数据类型_2
【整数类型】
——java各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以保证java系统的可移植性。(C语言所定义的变量在不同的操作系统所占的个数是不一样的。这是C语言不能实现编译完成之后再移植的原因。) ——java语言整型常量的三种表示形式: 十进制整数
八进制整数,要求以0开头
十六进制数,要求0x或0X开头
——java语言的整型常量默认为int型,声明long类型常量可以后加‘l’或‘L’。 如:int i1=600;//正确 long l1=88888888888L;//必须加L 【浮点类型】
——与整数类型类似,java浮点类型有固定的表数范围和字段长度,不受平台影响。 ——java浮点类型常量有两种表示形式
十进制数形式,例如:3.14 314.0 .314 科学计数法形式,如:3.14e2 3.14E2 100E-2
——java浮点型常量默认为double型,如要声明一个常量为float型,则需在数字后面加f或F,如: double d=12345.6;//正确 float f=12.3f;//必须加f否则会出错 【问题】:为什么double放float就会出错,int放long就不会出错?
——下面列出java的各种浮点类型
类型 占用存储空间 表数范围 精确度 float 4字节 -3.403E38~3.403e38 double 8字节 -1.798E308~1.798E308 【注意】:在计算机中表示浮点数是会有误差的。因为现实中是连续的,而计算机中的表示是离散的。
03_数据类型转换_1
——分为扩展转换和窄化转换
——boolean类型不可以转换为其他的数据类型
——整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
—容量小的类型自动转换为容量大的数据类型;数据类型按容量大小(指的是表示的数的大小,不是说内存里面占的多少)排列:
byte,short,char->int->long->float->double
byte,short,char之间不会相互转换,他们三者在做运算的时候首先转换为int类型
—容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。 —有多种类型的数据混合运算时,系统首先自动的将所有的数据转化成容量最大的那种数据类型,然后再进行计算。 —实数常量(如1.2)默认为double —整数常量(如123)默认为int 【注意】:直接可以把一个int类型的数赋值给byte,short,char,只要你不超出它的表数范围就行。如byte最多的表数到整数127,你不能写byte b1=129,这是错误的。 【例子程序】TestConvert:
public class TestConvert {
public static void main(String arg[]) { int i1 = 123; int i2 = 456;
double d1 = (i1+i2)*1.2;//系统将转换为double型运算 float f1 = (float)((i1+i2)*1.2);//需要加强制转换符 byte b1 = 67; byte b2 = 89;
byte b3 = (byte)(b1+b2);//系统将转换为int型运算,需 //要强制转换符 System.out.println(b3); double d2 = 1e200;
float f2 = (float)d2;//会产生溢出 System.out.println(f2);
float f3 = 1.23f;//必须加f long l1 = 123;
long l2 = 30000000000L;//必须加l
float f = l1+l2+f3;//系统将转换为float型计算
long l = (long)f;//强制转换会舍去小数部分(不是四舍五入)
} }
问题解释:
(1)这里有一个比较特殊的地方,你直接可以把一个int类型的数赋给byte,short,char都可以,只要你不超出他的表数范围就可以。什么意思呢?byte最多的表示idao正数127,你不能写byte b1=129,这样不行,超出了表数范围了。
(2)这里b1+b2是什么类型呢?int。byte,short,char之间不会相互转换,他们在做运算的时候,二话不说先把自己转换为int类型。
(3)b3会是几呢?-100。b1+b2=156,超出了int的表数范围127了,怎么强制转换呢?在内存里面,int是4个字节,byte是1个字节,强制转换的时候,它把后面超出的3个字节全部砍掉剩下的那个字节是几就是几。
(4)double转换成float,double是8个字节,float是4个字节,他内部转换难道说也是直接去掉后面4个字节,只剩4个字节吗?不是!因为浮点数在计算机内部它是用特殊的形式来表示,他专门中间存了一个小数点,来计算这小数点后面有几位,所以直接砍掉是转换不过来的。因此double转换成float就会出问题。 (5)要么float f3 = 1.23f;//必须加f;要么如果不加f就需要强制转换。 (6)long l2 = 30000000000L;//必须加l
(7)float f = l1+l2+f3;//系统将转换为float型计算,为什么?这个表达式里float类型最大。 (8)long l = (long)f;你可以把float转换成long,这个强制转换指的就是float都是带小数的,你可以把小数部分全部砍掉。 (9)记住一点就行了,大数转换为小数,加强制转换就行了 【课堂练习】:说出下面程序片段中编译错误或可能产生计算溢出的部分。 void public method() {
int i=1,j;
float f1=0.1; // 错,0.1是double类型;要么加f,要么前面加强制转换float float f2=123; // 对
long l1=12345678,l2=8888888888; // 错,第二个后面必须加L double d1=2e20,d2=124; // 对,int转换成double,自动转换
byte b1=1,b2=2,b3=129;b3=129; // 是错的,超出byte的表数范围了 j=j+10; // 错,变量要先声明再赋值才能运算,这里还没有赋值
i=i/10; // 对,这里把0.1转换成int类型,这里i=0 i=i*0.1; // 错,这里把double赋给int,需强制转换
char c1='a',c2=125;对
byte b=b1-b2; // 错,int赋给byte
char c=c1+c2-1; // 错,他们转换成了int,int赋给char需强制转换 float f3=f1+f2; // 对
float f4=f1+f2*0.1; // 错,o.1是double
double d=d1*i+j; // 对,一边左边是double都没问题 float f=(float)(d1*5+d2); // 对,加强制转换了
} 【练习】:在计算机上把这个程序修正过来,这个方法就不要叫它public method了,叫public static void main()。
04_数据类型转换_02(即上节练习) 05_程序格式
先是总结了以上内容
————格式(比算法还重要) 以后做任何都要遵循格式。 【格式应注意的问题】:
共分享92篇相关文档