黑马程序员---Java语言基础
来源:互联网 发布:江苏高考知乎 编辑:程序博客网 时间:2024/05/17 09:27
Java语言基础
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
1.Java基础
1.1.基本数据类型
1.1.1整数类型
概念: 整数类型用来存储整数数值,即没有小数部分的数值。整数常量在Java程序中有3种表示形式,分别为十进制、八进制和十六进制。
1) 十进制:十进制不能以0开头,0除外。
2) 八进制:八进制必须以0开头。
3) 十六进制必须以0X或0x开头
整数的类型:
整型变量根据它在内存中所占的大小的不同,分为type、short、 int和long4种类型。
它们的取值范围为:
值得注意是:当byte ,short类型在进行 “++” 操作时,会自动转换为int 类型。在定义以上4种类型变量时,要注意变量能够接受的最大值与最小值,否则就会出错。对于long型值,若赋给的值大于int 的最大值或Int 的最小值,则需要在数字后加上L或l,表示该数值为长整数。
1.1.2 浮点类型
浮点类型表示有小数部分的数字。Java语言中浮点类型分为单精度(float)与双精度(double),它们具有不同的取值范围。
注:(一般情况下小数都默认为double,所以若想使用float型小数,则需要在其后加上F 或 f )。
1.1.3 字符类型
1)char 型
字符类型(char)用于存储单个字符,占用16位(两个字节)的内存空间。在定义字符型变量时,要以单引号表示,如‘s’表示一个字符,但“s”则表示一个字符串了。
注:与c、c++一样,Java语言也可以把字符作为整数对待,由于unicode编码采用无符号编码,可以存储65536个字符(0x0000~0xffff),所以Java中的字符几乎可以处理所有国家的语言文字,整数与字符之间也可以相互转换如下代码:
public class ValueRange { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("a在unicode表中的顺序位置是:" + (int)'a'); //将char类强制转换为整型 System.out.println("unicode表中第97位是:" + (char)97); //将整形强制转换为char类型 }}输出:a在unicode表中的顺序位置是:97unicode表中第97位是:a以上代码可以说明char类型与int类型可以相互转换。
2)转义字符
转义字符是一种特殊的字符变量,其以反斜线”\”开头,后跟一个或多个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”。
Java常用转义字符如下:
将转义字符赋值给字符变量时,与字符常量一样需要使用单引号。 如
public class ValueRange { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //将转义字符'\\的值赋给变量c1 char c1 = '\\'; //将转义字符'\052的值赋给变量c2 char c2 = '\052'; //输出\ System.out.println(c1); //输出* System.out.println(c2); }}
1.1.4 布尔类型
布尔类型又称为逻辑类型,只有true 和false两个值,分别代表布尔逻辑中的“真”和“假”。布尔不能与整数类型进行交换。常用于流程控制中的判断条件。
1.2 变量与常量
在程序执行过程中,其值不能改变的量称为常量,其值能被改变的量称为变量。变量与常量的命名都必须使用合法的标识符。
1.2.1 标识符与关键字
1)标识符
定义:标识符可以简单理解为一个名字,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。
命名规范:Java语言规定标识符由任意顺序的字母、下划线(_)、美元符号($)和数字组成,并且第一个字符不能是数字。标识符也不能是Java中的关键字。
注:Java中是严格区分大小写的,如 Man 和man 是不同的两个标识符。
2)关键字
关键字是Java语言中已经被赋予特定意义的一些单词,不可以把这些字作为标识符来使用。
Java常用的关键字有:
1.2.2 声明变量
对于变量的命名并不是任意的,应遵循以下几条规则:
1) 变量名必须是一个有效的标识符;
2) 变量名不可以使用Java中的关键字;
3) 变量名不能重复;
4) 应选择有意义的单词作为变量名。(Java中允许使用汉字或其他非英语文字作为变量名,编译并不会出错,但为了命名规范尽量不要如此使用)。
1.2.3 声明常量
在程序运行过程中一直不会改变的量称为常量(constant),通常也称为“final常量”。常量在整个程序只能被赋值一次。在为所有的对象共享值时,常量是非常有用的。
声明常量要使用关键字“final”
如 final 数据类型 常量名称[=值]
常量名一般使用大写字母,这并不是必须的,只是为了清楚表明正在使用常量。
注:1)当final变量是成员变量的时候,则必须设定初值,否则会编译错误。
2)常量只能进行一次赋值。
public class TestPart {//“成员常量”若没有赋值则会编译失败static final double PI =3.14; //只是声明变量age,并不赋值,作为常量会自动赋初值的static int age ; public static void main(String [] args){ //常量也可以先声明后赋值,但只能赋一次值final int number ; number = 125; //再次赋值则报错//number = 126; int num = 124 ; //而变量则可以一再赋值了num = 12;//输出3.14System.out.println("常量PI的值为:" + PI); //输出0,默认值为0;System.out.println("int型变量age的值为:" + age); //输出125System.out.println("常量number的值为:" + number);//输出12System.out.println("变量num的值为:" + num ); }}输出常量PI的值为:3.14int型变量age的值为:0常量number的值为:125变量num的值为:12
1.2.4变量的有效范围
一般按变量的有效范围将变量分为“成员变量”和“局部变量”。
1) 成员变量
在类体中定义的变量称为成员变量,成员变量在整个类中都有效。成员变量又分为静态变量和实例变量;
如果在成员变量的类型前加上static 关键字,这样的成员变量称为静态成员变量。静态成员变量的有效范围可以跨类,甚至可以达到整个应用程序之内。对于静态方法,除了能在定义它的类中存取,还能直接以“类名.静态变量”的方式在其他类中使用。
2) 局部变量
在类的方法体中定义的变量(即是“{”与“}”之间定义的变量),称为局部变量。局部变量只在当前代码块中有效。关于局部变量应注意以下几点:
1.在类的方法中声明的变量,包括方法参数,都属于局部变量。
2.局部变量的生命周期取决于方法,方法调用时,Java虚拟机会为方法中的局部变量分配内存空间,方法结束,局部变量就会销毁。
3.局部变量可与成员变量重名,但此时成员变量将被隐藏,即这个成员变量在此方法中失效。
public class TestPart {//定义成员变量times static int times = 35; public static void main(String [] args){ //定义局部变量times int times = 36; //输出36 System.out.println(times); //调用其他方法 printTime(); } public static void printTime(){ //输出35 System.out.println(times); }}
由上代码可知:成员变量作为于全类,即使在main方法内被局部变量所覆盖,但只是有局部变量的有效范围失效而已,在printTime()内,times仍为35.
1.2.5运算符
1) 赋值运算符
赋值运算符以符号“=”表示,它是一个二元运算符(对两个操作数作处理),其功能是将右方操作数所含的值赋给左方的操作数。(左方的操作数必须是一个变量,而右边的操作数则可以为任何表达式,包括变量、常量、有效表达式)。
2) 算术运算符
Java中的算术运算符主要有,如下表
具体代码:
public class TestCount { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub double num1 = 12.2; double num2 = 2.3; System.out.println("数字一号为:" + num1); System.out.println("数字二号为:" + num2); //两数之和为:14.5 System.out.println("两数之和为:" + (num1 + num2)); //两数之差为:9.899999999999999 System.out.println("两数之差为:" + (num1- num2)); //两数之积为:28.059999999999995 System.out.println("两数之积为:" + num1 * num2); //两数之商为:5.304347826086957 System.out.println("两数之商为:" + num1 / num2); }}
注:12.2-2.3=9.9,但是程序运算的结果却是有精度的误差,这是java中的bug,是难于避免的,如果需要用到高精度的运算,就需要用到 BigDecimal.
3) 自增和自减运算符
- 自增与自减运算符是单目运算符,可以放在操作数之前,也可以放在操作数之后。
- 操作数必须是一个整形或浮点变量。
- 放在前面的自增、自减 会先进行加一、减一 操作,再将值进行表达式运算,而放在后面的则相反,先进行表达式运算,再进行加一、减一操作。如:
public class TestCount { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int i = 3 ; int x = 3 ; //先赋值再加加输出i ++ = 3 System.out.println("i ++ = " + i++ ); //先加加再赋值输出++ x = 4 System.out.println("++ x = " + ++x ); }}输出:i ++ = 3++ x = 44) 比较运算符
比较运算符属于二元运算符,用于程序中的变量之间的、变量和自变量之间以及其他类型的信息之间的比较。其运算结果为boolean,比较运算符共有6种:如下图所示
5) 逻辑运算符
返回类型为布尔值的表达式,如比较运算符,可以被组合在一起构成一个更复杂的表达式。
逻辑运算符包括&(&&)(逻辑与)、 |(||)(逻辑或)、!(逻辑非)。
逻辑运算符的操作元都必须是boolean型的数据,只有!(逻辑非)为一元运算符。
逻辑运算符的逻辑运算如下图
具体运算如下代码:
public class TestCount { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int i = 3 ; int x = 6 ; boolean result = (i > x)&&(i < x); //因为(i > x )或(i < x)确定有一个为false,所以输出为false System.out.println(result); //因为(i > x )或(i < x)确定有一个为true,所以输出为false result = (i > x) || (i < x); System.out.println(result); result = !(i > x); //输出非(i > x)因为(i > x )为false,所以非(i > x)则为true System.out.println(result); }}输出:falsetruetrue
小知识点:&&(短路与)和&(与) 、|| (短路或)和| (或)的分别,即短路与非短路的分别:
“与”是两者为true,结果才为true;而“或”则两者为false,结果才为false,所以所谓短路则如果第一个数为false,那么 “短路与”就不会与判断第二个操作元是否为false了,而 “短路或”也是一样,若第一个数是true,则不会判断第二个操作元是否为true了。不过其实如此一来,就算第二个操作元会报错也不会抛出异常了。
5) 位运算符
位运算是完全针对位方面的操作。整数数据在内存中以进制的形式表示,如int 型 变量 7 的二进制表示是 00000000 00000000 00000000 00000111;
左边最高位是符号位,最高是0的表示正数,若为1则表示负数。负数采用补码表示,如-8的二进制表示为 1111111111111111 11111111 11111000。 这样就可以对整型数据进行按位运算了。
1.“按位与”运算
“按位与”运算的运算符为“&”,为双目运算符。“按位与”的规则是:如果两个整型数据a、b 对应位都是1 , 则结果位才为1,否则为0.如果两个操作数的精度不同,则结果与精度最高的操作数最高的相同。
2.“按位或”运算
顾名思义,就是两个整型数据a、b对应位都是0,则结果位才为0;
3.“按位非”运算
为单目运算符,意思就是将操作数二进制中的1修改为0,将0修改为1的操作。
4.“按位异或”运算
运算法则为:当两个操作数的二进制表示相同(同时为0或同时为1)时,结果为0;否则为1
6)移位操作
将对数据按二进制进行移位操作。Java中的移位操作符有3种。
1) 左移”<<” 左边的操作数在内存中的二进制数据左移右边操作数指定的位数,左边移空的部分补0;
2) 右移”>>” 当使用“>>”符号时,如果最高位为0,左移空的位就填入0 ;如果最高位为1 , 右移空的位就填入1 。
3) 无符号右移”>>>” 无论最高位是0还是1,左侧移空的高位都被填入0.
注:(适用移位运算符的数据类型有byte 、short、char、int 和long)
7 )三元运算符
三元运算符其实就是if()…else…的简写。
使用格式为: 条件式 ? 值1:值2;
简写的格式一般都有功能的缺失:三元运算符只能进行赋值操作,不能输出语句。
如
public class TestCount { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int a = 18 ; int b = 20; //作出赋值判断 等效于if(a > b )max = a;else max = b; int max = (a > b ) ? a : b ; //输出20 System.out.println("最大数为:" + max); }}
8)运算符的优先级
通常优先级由高到低的顺序依次是:
增量和减量运算 > 算术运算 > 比较运算 > 逻辑运算 > 赋值运算
1.3 数据类型转换
类型转换是将一个值从一种类型更改为另一种类型的过程。如 String str = “456”;
可以将str 转换为一个数值型,而且任意类型都可以转换为String类型。
关于精度问题:
1.如果低精度数据类型向高精度数据类型转换,则总是成功,不会有精度的缺失。
2.如果高精度数据向低精度类型转换,则必须会有信息缺失,且可能失败。
3.数据类型的转换有两种方式:隐式转换与显式转换。
1)隐式类型转换
即低精度向高精度转换,系统会自动执行,无须其他操作。
数据类型的精度由“低”到“高”排列的顺序为 byte --> short --> int --> long -->float -->double
由上图可知,当精度不同的数据类型在进行运算时,结果与精度最大的一致。
2)把高精度的变量赋给低精度的变量时,必须使用显式类型转换运算(又称为强制类型转换)
格式如下:
(类型名)要转换的值。
public class TestCount { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //浮点类型向整形转换 int a = (int)182.23 ; int b = (int)20.12; //显式转换后float会失去小数点后的小数的输出182 System.out.println("显式转换后的数a:" + a); //输出20 System.out.println("显式转换后的数b:" + b); }}输出:显式转换后的数a:182显式转换后的数b:20
1.4 代码注释
1.单行注释:// 直到换行为止,其内容均为注释。
2.多行注释:/*
*/ 间的东西都会变成注释
3.文档注释:/**
*/间的东西都会变成注释 ; JVAV中的特有注释,经过java中javadoc.exe 生成网页。相当于程序说明书。
注释也可用于调试程序。
没有注释的代码是垃圾代码。
2.代码实例
用^实现变量之间的交换,与传统的移位操作作一比较。
public class NumChance { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int a = 12 ; int b = 20 ; System.out.println("移位前 a = " + a + ", b = " + b ); numChance(a, b); numChance2(a, b); } public static void numChance(int a , int b){ //传统方法的移位操作,需要第三方的加入 int temp ; temp = a; a = b; b = temp; System.out.println("传统方法的移位 a = " + a + ", b = " + b ); } //而用异或操作进行移位操作,只需二个数相互异或,不需要第三方加入 public static void numChance2(int a , int b ){ a = a ^ b ; b = a ^ b; a = a ^ b; System.out.println("用异或移位 a = " + a + ", b = " + b ); }}输出:移位前 a = 12, b = 20传统方法的移位 a = 20, b = 12用异或移位 a = 20, b = 12
加密的原理:与同一个数异或一次,即乱码,再与这个数异或一次就回复正常
----------- android培训、java培训、java学习型技术博客期待与您交流! ------------
- 黑马程序员---Java语言基础
- 黑马程序员--Java语言基础
- 黑马程序员--Java语言基础
- 黑马程序员--Java语言基础
- 黑马程序员------java语言基础
- 黑马程序员------java语言基础
- 黑马程序员--java基础--语言基础部分
- [黑马程序员]--Java语言基础一
- [黑马程序员]--Java语言基础二
- [黑马程序员]--Java语言基础-多线程
- 黑马程序员- java语言基础组成
- 黑马程序员—Java语言基础1
- 黑马程序员—Java语言基础2
- 黑马程序员—Java语言基础1
- 黑马程序员—Java语言基础2
- 黑马程序员—Java语言基础
- 黑马程序员 Java 语言基础下
- 黑马程序员-Java语言基础2
- 统计难题(字典树 模版题)
- 鸟哥私房菜读书笔记【1】
- 【数组】14周项目五。字符串统计
- DataGridViewComboBoxColumn 可以让用户输入并自动匹配选项
- 关于寻找地外文明
- 黑马程序员---Java语言基础
- Sql Server 2008 char类型 与 EL表达式的冲突
- Android支持的尺寸类型
- Android 源代码 error Exited sync due to fetch errors…
- 浅谈契约式编程
- C51串口的SCON寄存器及工作…
- idata的各个类型
- delphi 导出到excel的7种方法
- FPGA和CPLD的比较