目录
java基础
-
编写Java程序
- java代码必须驻留在一个类中
- java源文件名必须和类名相同。
- java源代码文件扩展名必须为.java
- 所有的Java 程序由public static void main(String []args)方法开始执行。
-
编译java程序
-
javac将会在工作目录中创建一个类名.class
-
-
运行java程序
- java 类名(不包含class扩展名)
基本语法
java标识符
- 标识符必须不是java关键字,不能是一个布尔字面值,不能是空字面值
- 标识符必须在其作用域内是唯一的。
- 标识符是java字母和数字的一个长度没有限制的序列。
- 大小写敏感:标识符Hello与标识符hello是不同
所有的标识符都应该以字母(A-Z或者a-z),美元符(\()、或者下划线(_)开始, 之后可以是字母(A-Z或者a-z),美元符(\))、下划线(_)或数字的任何字符组合。
合法标识符举例:row_count、$salary、_x3、x2、__1_value;非法标识符举例:2x、-salary
java变量
变量类型###
- 局部变量
- 类变量(静态变量)
- 成员变量(非静态变量)
变量声明
byte x;
int rowCount;
char;
int a,b 等价于 int a; int b;
char x = 'd';
变量的命名惯例
-
变量名应以小写字母开头且混合大小写;
-
后续的单词都以一个大写的字母开头,不应以_或$开头
java常量
-
java中常量,一旦赋值之后,其值不能修改。赋值时候不能超过类型的最大值。
-
常量名通常都是大写的
-
单词之间用下划线隔开
Java 基本数据类型#
内置数据类型##
-
byte:
byte 数据类型是8位、有符号的,以二进制补码表示的整数;
最小值是 -128(-2^7);
最大值是 127(2^7-1);
默认值是 0;
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
例子:byte a = 100,byte b = -50。
-
short:
short 数据类型是 16 位、有符号的以二进制补码表示的整数
最小值是 -32768(-2^15);
最大值是 32767(2^15 - 1);
Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
默认值是 0;
例子:short s = 1000,short r = -20000。
-
int:
int 数据类型是32位、有符号的以二进制补码表示的整数; 最小值是 -2,147,483,648(-2^31); 最大值是 2,147,483,647(2^31 - 1); 一般地整型变量默认为 int 类型; 默认值是 0 ; 例子:int a = 100000, int b = -200000。
-
long:
long 数据类型是 64 位、有符号的以二进制补码表示的整数; 最小值是 -9,223,372,036,854,775,808(-2^63); 最大值是 9,223,372,036,854,775,807(2^63 -1); 这种类型主要使用在需要比较大整数的系统上; 默认值是 0L; 例子: long a = 100000L,Long b = -200000L。 **注:**"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
-
float:
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数; float 在储存大型浮点数组的时候可节省内存空间; 默认值是 0.0f; 浮点数不能用来表示精确的值,如货币; 例子:float f1 = 234.5f。
-
double:
double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数; 浮点数的默认类型为double类型; double类型同样不能表示精确的值,如货币; 默认值是 0.0d; 例子:double d1 = 123.4。
-
boolean:
boolean数据类型表示一位的信息; 只有两个取值:true 和 false; 这种类型只作为一种标志来记录 true/false 情况; 默认值是 false; 例子:boolean one = true。
-
char:
char类型是一个单一的 16 位 Unicode 字符; 最小值是 \u0000(即为0); 最大值是 \uffff(即为65,535); char 数据类型可以储存任何字符; 例子:char letter = 'A';。
注: 整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级。
引用数据类型##
- 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
- 对象、数组都是引用数据类型。
- 所有引用类型的默认值都是null。
- 一个引用变量可以用来引用任何与之兼容的类型。
- 例子:Site site = new Site("Runoob")。
Java类型转换#
-
自动类型转换(加宽转换)
必须满足转换前的数据类型的位数要低于转换后的数据类型
-
强制类型转换(收窄转换)
-
隐含强制类型转换
注:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 转换过程中可能导致溢出或损失精度。
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
java注释
public class HelloWorld {
/* 这是第一个Java程序
*它将打印Hello World
* 这是一个多行注释的示例
*/
public static void main(String []args){
// 这是单行注释的示例
/* 这个也是单行注释的示例 */
System.out.println("Hello World");
}
}
操作符#
- 自增操作符
- 逻辑取反操作符
- 位取反操作符
- 算术操作符
java语句#
-
条件语句
-
循坏语句
- while循环
- do...while循环
while循环只要布尔表达式为 true,循环就会一直执行下去。如果不满足条件,则不能进入循环。
但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
for循环
`for(初始化; 布尔表达式; 更新) {
//代码语句
}`
`for(声明语句 : 表达式)
{
//代码句子
}`
-
break语句
-
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
-
break 跳出最里层的循环,并且继续执行该循环下面的语句。
-
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
-
在 for 循环中,continue 语句使程序立即跳转到更新语句。
-
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
-
-
switch case语句
-
switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
-
switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
-
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
-
当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
-
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
-
switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
-
如果 case 语句块中没有 break 语句时,JVM 并不会顺序输出每一个 case 对应的返回值,而是继续匹配,匹配不成功则返回默认 case。
-
测试反思#
强制类型转换问题
s+1:属于int类型
所以程序报错不能将类型int转换为类型short,必须强制转换
a=(short)(a+1);
运算符+=隐藏了一个强制类型转换
public class Test {
public static void main(String[] args) {
short a=1;
byte b=1;
a=(short)(a+1);
b+=1;
System.out.println(a);
System.out.println(b);
}
}
输出结果都为2.
类型最大值
System.out.print( "Integer.MIN_VALUE == -Integer.MAX_VALUE:"+(Integer.MIN_VALUE == -Integer.MAX_VALUE ));
输出为FALSE