一.初识main方法
1.1 main方法示例
public class Hello { public static void main(String[] args){ System.out.println("hello"); }} class LJBB { }
如上是一个简单的Java程序,可能第一次看的时候大家都一头雾水,为什么这多public,class,别急,其实很易懂,java的main方法应该是主流语言中最长的
通过上述代码可以看到一个完整的Java程序由三个部分构成:
1.源文件(扩展名为*java):源文件带有类的定义,类用来表示程序的一个组件,小程序或许只会有一
类。类的内容必须包含在花括号里面。
2.类:类中带有一个或多个方法,方法必须在类的内部声明,
3.方法:在方法的花括号中编写方法应该执行的语句。
总结:类存在于源文件里面:方法存在子类中:语句存在了方法中。
注意:在一个源文件中只能有一个public修饰的类,而且源文件名字必须与public修饰的类名字相同
好了,代码编写完了,如何让它"运行"起来呢?
二.运行Java程序
Java是一门半编译型,半解释型的语言,先通过javac编译程序把源文件进行编译,编译后生成的.class文件是由字节码组成的平台无关、面向VM的文件。最后启动java虚拟机来运行:class文件,此时VM会将字节码转换成平台能够理解的形式来运行。
1.使用记事本或者IDEA(集成开发环境)编写Java源程序。IDEA更适合新手
2.使用javac,exe编译器编译Java源程序,生成xxx.class的字节码文件 语法格式:javac xxx,iava3.使用java运行xxx.class字节码文件 语法格式:java xxx
注意:在运行ava程序前,必须先安装好DK(ava Development Kit即java开发工具包),JDK里面就包含了Javac和Java工具,Java程序最终是在JVM(ava虚拟机)中运行的。
此处运行结果示例:
注:目录要在java文件所在的目录
以下是JDK,JRM,JVM三者的关系:
2.1注释符
// 注释内容
/*....*...*... */此类注释可以写入javac文档
2.2标识符
在java程序中,Test称为类名,main成为方法名,也可以将其称为标识符,即在程序中由用户给定类名,方法名或变量名。
标识符可以包含字母,数字,下划线以及$符号等等。
不能以数字开头。
我们通常建议,类名取为字母大写的单词,方法名通常首字母小写,其余大写的单词
变量名与方法名规则相同。
2.3关键字
关键字由java语言提前定义好的,有特殊含义的标识符或者保留字。
三,数据类型
public class Demo {public static void main ( String [] args ){System . Out . println ( "hello world!" );System . Out . println ( 100 );System . Out . println ( 3.14 );System . Out . println ( 'A' );System . Out . println ( true );System . Out . println ( false );}}
其中:100、3.14、‘A’、true/false都是常量,将其称为字面常量。
字面常量的分类:1. 字符串常量:由 "" 括起来的,比如 “12345” 、 “hello” 、 “ 你好 ” 。2. 整形常量:程序中直接写的数字 ( 注意没有小数点 ) ,比如: 100 、 10003. 浮点数常量:程序中直接写的小数,比如: 3.14 、 0.494. 字符常量:由 单引号 括起来的当个字符,比如: ‘A’ 、 ‘1’5. 布尔常量:只有两种 true 和 false6. 空常量: null( 后面了讲 )
3.1数据类型
注意:不论是在 16 位系统还是 32 位系统, int 都占用 4 个字节, long 都占 8 个字节整形和浮点型都是带有符号的整型默认为 int 型,浮点型默认为 double字符串属于引用类型,该种类型后序介绍。1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB
3.2 变量
在程序中,除了有始终不变的常量外,有些内容可能会经常改变,比如:人的年龄、身高、成绩分数、数学函数的计算结果等,对 于这些经常改变的内容,在 Java 程序中,称为变量 。 而数据类型就是用来定义不同种类变量的 。
变量语法格式
数据类型 变量名 = 初始值 ;
3.2.1整形变量
// 方式一:在定义时给出初始值int a = 10;// 方式二:在定义时没有给初始值,但使用前必须设置初值int b;b = 10;// 使用方式二定义后,在使用前如果没有赋值,则编译期间会报错int c;System.Out.println(c);c = 100;// int型变量所能表示的范围:System.Out.println(Integer.MIN_VALUE);System.Out.println(Integer.MAX_VALUE);// 注意:在定义int性变量时,所赋值不能超过int的范围int d = 12345678901234; // 编译时报错,初值超过了int的范围,int的包装类型为 Integer
3.2.2长整型变量
int a = 10 ;long b = 10 ; // long 定义的长整型变量long c = 10L ; // 为了区分 int 和 long 类型,一般建议: long类型变量的初始值之后加L或者l// long 型变量所能表示的范围:这个数据范围远超过 int 的表示范围 . 足够绝大部分的工程场景使用 .System . Out . println ( Long . MIN_VALUE ); //long的包装类型为LongSystem . Out . println ( Long . MAX_VALUE ); //long的包装类型为Long
3.2.3 短整型变量
short a = 10 ;// short 型变量所能表示的范围:System . Out . println ( Short . MIN_VALUE );System . Out . println ( Short . MAX_VALUE ); //short的包装类型为Short
3.2.4 字节型变量
byte b = 10 ;System . Out . println ( b );// byte 型变量所能表示的范围:System . Out . println ( Byte . MIN_VALUE );System . Out . println ( Byte . MAX_VALUE );注意事项:1. byte 在任何系统下都占 1 个字节2. byte 的范围是: -128 ~ 1273. 字节的包装类型为 Byte
3.2.5双精度浮点型
double num = 1.1 ;System . out . println ( num * num ); // 输出 1.21 吗?// 执行结果1.2100000000000002在 Java 中 , int 除以 int 的值仍然是 int( 会直接舍弃小数部分 ) 。如果想得到 0.5, 需要使用 double 类型计算 .double a = 1.0 ;double b = 2.0 ;System . out . println ( a / b ); // 输出0.5注意事项:1. double 在任何系统下都占 8 个字节2. 浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算3. double 的包装类型为 Double
3.2.6单精度浮点型
float num = 1.0f ; // 写作 1.0F 也可以System . out . println ( num );float 类型在 Java 中占四个字节 , 同样遵守 IEEE 754 标准 . 由于表示的数据精度范围较小 , 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float. float 的包装类型为 Float 。
3.2.7字符型变量
char c1 = 'A' ; // 大写字母char c2 = '1' ; // 数字字符System . out . println ( c1 );System . out . println ( c2 );// 注意: java 中的字符可以存放整形char c3 = ' 帅 ' ;System . out . println ( c3 );char 的包装类型为 Character
3.2.8布尔型变量
布尔类型常用来表示真假,在现实生活中也是经常出现的,比如:隔壁同学和校花订婚了大部分人第一反应就是:我 x ,真的假的?boolean b = true ;System . out . println ( b );b = false ;System . out . println ( b );2. Java 的 boolean 类型和 int 不能相互转换 , 不存在 1 表示 true, 0 表示 false 这样的用法 .
3.2.9类型转换
Java 作为一个强类型编程语言 , 当不同类型之间的变量相互赋值的时候 , 会有教严格的校验 .在 Java 中,当参与运算数据类型不一致时,就会进行类型转换。 Java 中类型转换主要分为两类:自动类型转换 ( 隐式 ) 和 强制类型转换 ( 显式 ) 。3.2.10 自动类型转换(隐式)
3.2.10 自动类型转换(隐式)
自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行
// 整型默认情况下是 int// 浮点型默认情况下是 doubleint a = 100 ;long b = 10L ;b = a ; // a 和 b 都是整形, a 的范围小, b 的范围大,当将 a 赋值给 b 时,编译器会自动将 a 提升为 long 类型,然后赋值a = b ; // 编译报错, long 的范围比 int 范围大,会有数据丢失,不安全float f = 3.14F ;double d = 5.12 ;d = f ; // 编译器会将 f 转换为 double ,然后进行赋值f = d ; // double 表示数据范围大,直接将 float 交给 double 会有数据丢失,不安全byte b1 = 100 ; // 编译通过, 100 没有超过 byte 的范围,编译器隐式将 100 转换为 bytebyte b2 = 257 ; // 编译失败, 257 超过了 byte 的数据范围,有数据丢失
3.2.11强制类型转换(显式)
int a = 10 ;long b = 100L ;b = a ; // int-->long ,数据范围由小到大,隐式转换a = ( int ) b ; // long-->int, 数据范围由大到小,需要强转,否则编译失败float f = 3.14F ;double d = 5.12 ;d = f ; // float-->double ,数据范围由小到大,隐式转换f = ( float ) d ; // double-->float, 数据范围由大到小,需要强转,否则编译失败a = d ; // 报错,类型不兼容a = ( int ) d ; // int 没有 double 表示的数据范围大,需要强转,小数点之后全部丢弃byte b1 = 100 ; // 100 默认为 int ,没有超过 byte 范围,隐式转换byte b2 = ( byte ) 257 ; // 257 默认为 int ,超过 byte 范围,需要显示转换,否则报错boolean flag = true ;a = flag ; // 编译失败:类型不兼容flag = a ; // 编译失败:类型不兼容
如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
3.2.12类型提升
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。1. int 与 long 之间: int 会被提升为 longint a = 10 ;long b = 20 ;int c = a + b ; // 编译出错 : a + b== 》 int + long--> long + long 赋值给 int 时会丢失数据long d = a + b ; // 编译成功: a + b==>int + long--->long + long 赋值给 long2. byte 与 byte 的运算byte a = 10 ;byte b = 20 ;byte c = a + b ;System . out . println ( c );// 编译报错Test . java : 5 : 错误 : 不兼容的类型 : 从 int 转换到 byte 可能会有损失byte c = a + b ;^原因:byte 和 byte 都是相同类型 , 但是出现编译报错 . 原因是 , 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和 b 都提升成 int, 再进行计算 , 得到的结果也是 int, 这是赋给 c, 就会出现上述错误 .
int num = 10 ;// 方法 1String str1 = num + "" ;// 方法 2String str2 = String . valueOf ( num );
2. String 转成 intString str = "100" ;int num = Integer . parseInt ( str );
四,运算符
4.1 基本四则运算符:加减乘除模(+ - * / %)
int a = 20 ;int b = 10 ;System . out . println ( a + b ); // 30System . out . println ( a - b ); // 10System . out . println ( a * b ); // 200System . out . println ( a / b ); // 2 int / int 结果还是int类型,而且会向下取整System . out . println ( a % b ); // 0 模运算相当于数学中除法的余数
两侧操作数类型不一致时,向类型大的提升
System.out.println(1+0.2); // +的左侧是int,右侧是double,在加之前int被提升为double
4.2 增量运算符 += -= *= %=
int a = 1;
a += 2 ; // 相当于 a = a + 2System . out . println ( a ); // 输出 3a -= 1 ; // 相当于 a = a - 1System . out . println ( a ); // 输出 2a *= 3 ; // 相当于 a = a * 3System . out . println ( a ); // 输出 6a /= 3 ; // 相当于 a = a / 3System . out . println ( a ); // 输出 2a %= 3 ; // 相当于 a = a % 2System . out . println ( a ); // 输出 2
4.3. 自增/自减运算符 ++ --
++是给变量的值+1,--是给变量的值-1。
int a = 1 ;a ++ ; // 后置 ++ 表示给 a 的值加 1 ,此时 a 的值为 2System . out . println ( a ); // 输出 3System . out . println ( a ++ ); // 注意:后置 ++ 是先使用变量原来值,表示式结束时给变量 +1 ,因此输出2++ a ; // 前置 ++ 表示给 a 的值加 1System . out . println ( ++ a ); // 注意:前置 ++ 是先给变量 +1 ,然后使用变量中的值,因此输出 5System . out . println ( a ); // 输出 5// -- 操作符给操作 -1 ,与 ++ 含义类似
关系运算符
int a = 10 ;int b = 20 ;// 注意:在 Java 中 = 表示赋值,要与数学中的含义区分// 在 Java 中 == 表示相等System . out . println ( a == b ); // falseSystem . out . println ( a != b ); // trueSystem . out . println ( a < b ); // trueSystem . out . println ( a > b ); // falseSystem . out . println ( a <= b ); // trueSystem . out . println ( a >= b ); // false
4.4. 逻辑运算符(重点)
逻辑运算符主要有三个 : && || ! ,运算结果都是 boolean 类型。
1. 逻辑与 &&
语法规则:表达式1 && 表达式2,左右表达式必须是boolean类型的结果。 相当于现实生活中的且,比如:如果是学生,并且 带有学生证 才可以享受半票。 两个表达式都为真,结果才是真,只要有一个是假,结果就是假。
2. 逻辑 ||
语法规则:表达式 1 || 表达式 2 ,左右表达式必须是 boolean 类型的结果。相当于现实生活中的或,比如:买房子交钱时,全款 或者 按揭都可以,如果全款或者按揭,房子都是你的, 否则站一边去。左右表达式至少有一个位真,则结果为真
3. 逻辑非 !
语法规则: ! 表达式真变假,假变真。int a = 1 ;System . out . println ( ! ( a == 1 )); // a == 1 为 true ,取个非就是 falseSystem . out . println ( ! ( a != 1 )); // a != 1 为 false ,取个非就是 true
4.5. 位运算符
Java 中数据存储的最小单位是字节,而数据操作的最小单位是比特位 . 字节是最小的存储单单位,每个字节是由 8 个二 位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。位操作表示 按二进制位运算 . 计算机中都是使用二进制来表示数据的 (01 构成的序列 ), 按位运算就是在按照二进制位的每一位依次进行计算
1. 按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
int a = 10 ;int b = 20 ;System . out . println ( a & b );0
2. 按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
int a = 10 ;int b = 20 ;System . out . println ( a | b );
注意 : 当 & 和 | 的操作数为整数 (int, short, long, byte) 的时候 , 表示按位运算 , 当操作数为 boolean 的时候 , 表 示逻辑运算.
int a = 0xf ;System . out . printf ( "%x\n" , ~a )
int a = 0x1 ;int b = 0x2 ;System . out . printf ( "%x\n" , a ^ b );注意:如果两个数相同,则异或的结果为 0
4.6. 条件运算符
条件运算符只有一个 :表达式 1 ? 表达式 2 : 表达式 3当 表达式 1 的值为 true 时 , 整个表达式的值为 表达式 2 的值 ;当 表达式 1 的值为 false 时 , 整个表达式的值为 表达式 3 的值 .也是 Java 中唯一的一个 三目运算符 , 是条件判断语句的简化写法
// 求两个整数的最大值int a = 10 ;int b = 20 ;int max = a > b ? a : b ;