Java
是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java
虚拟机,Java
仍是企业和开发人员的首选开发平台。
Java关键字:是Java语言保留供内部使用的,比如class 用户与定义类。关键字也可以称为保留字,他们的意思是一样的。
public class HelloWorld
{
public static void main(String[])
{
System.out.println("HelloWorld...");
}
}
关键字是Java语言事先定义的,有特殊的意义的标识符,简而言之就是在高级记事本或者IDE中颜色会改变的单词就是关键字
关键字 | |||||
---|---|---|---|---|---|
abstract | assert | boolean | break | byte | case |
catch | char(character) | class | const | continue | default |
do | double | else | extends | final | finally |
float | for | goto | if | implements | import |
null | package | private | protected | public | return |
short | static | strictfp | super | switch | synchronized |
this | throw | throws | transient | try | void |
volatile | while |
注意
:不需要刻意的去背!后面我们会慢慢的接触到每个关键字的用法
关键字的特点
课堂小案例:
判断一下单词哪些是关键字:
class HelloWorld public static void main String System out println
class:类名
public:共有的
static:静态的
void:没有返回结果
标识符:等同于现实生活中的取名字,Java中对包、类、方法、参数和变量等要素命名的时候使用的字符序列称为标识符。 简而言之就是给类,接口,方法等起名字。
规则:一定要遵守的,如果违反那么编译会报错
规范:大家相互约定,都会遵守,如果不遵守编译不会报错
针对开发中对 包、类、抽象类、接口和实现类、变量、方法、常量的命名规范
也就是文件夹
// www.bobo.com
com.bobo.www
com.bobo.oa
eg: HelloWorld IdentifiedDemo
eg: IStudent IPerson IUserService
eg: StudentImpl PersonImpl UserServiceImpl
eg: AbsStudent AbsPerson
eg: studentName studentAge score totalScore
eg: getTotalScore getAvgScore getMaxScore getMinScore
eg: MAX_VALUE MIN_VALUE
面试题:说一说你对Java规范的理解
注释的概念:
为程序进行解释说明的,编译期不会对注释进行编译操作
注释的好处:
单行注释: //
多行注释: /* 在此处写我们的注释内容 */ 多行注释是不能嵌套的
文档注释: /** */
注意:
public class zhushi
{
/**
* 我们的第一个main方法
*/
public static void main(String[] args){
// 声明一个变量 测试
/*
注释1
注释2
注释3
*/
String userName = "张三";
}
}
在程序的执行过程中,值不会发生改变的量
一周有7天
PI:3.1415926
一年有12个月
字面值常量
就是具体的值
1.) 整数常量
大家要注意整数的进制。
2.) 小数常量
float,double后面会具体的来介绍这两个类型
3.) 布尔型常量
用来表示 “真” “假”,在程序中布尔型只有两个值 true
false
4.) 字符常量
什么是字符:字符串中的最小单位,包括字母,数字,运算符,标点符号和其他符号
字符本质上还是数字
针对有特殊含有的字符我们需要通过转义符来实现 “\”
\t 制表 \n 换行 \r\n 换行 \R 换行 \’ \"
5.) 字符串常量
public class ConstantDemo
{
public static void main(String[] args)
{
// 整数 常量
System.out.println(10);
// 二进制常量 13
System.out.println(0b01101);
// 八进制 10
System.out.println(012);
// 十六进制 65535
System.out.println(0xFFFF);
System.out.println(5.5f);
System.out.println(5.6D);
System.out.println(true);
System.out.println(false);
// 字符 '' 单引号不能为空
System.out.println('\'');
// 字符串常量 必须写在一对 双引号之内
System.out.println("HelloWorld");
System.out.println("");
// System.out.println(null);
}
}
1.3.2 自定义常量
后面章节中会和大家介绍
变量的定义:在程序的执行过程中,其值可以发生改变的量。类似于数学中的未知数 X
变量的本质:就是一个地址
变量的三要素:
public class VariableDemo
{
public static void main(String[] args)
{
// 定义一个变量 租房子 我 我要租一个两室一厅的房子
int a ;// 声明了一个变量
a = 20; // 赋值操作 将一个常量赋值给了一个变量
System.out.println(a); // 使用
a = 50;
System.out.println(a); // 使用
int b = 100; // 声明和赋值一块执行
System.out.println(b);
int c,d,e; // 声明多个变量可以通过,连接
c = 1;
d = 2;
e = 3;
int c1 = 20,d1=30,e1=40; // 这种方式语法上支持,但是不推荐 推荐一行声明一个变量
}
}
注意点:
计算机能识别是只有二进制文件0
和1
eg:10010101010101
单位 | 说明 |
---|---|
1位 | 上面的每一个0或者1就是一位 |
1B | 1B=1*8 字节,1一个字节等于8位 0000 0000 10000 0000 -1 -128~127 |
1KB | 1KB=1024*B |
1MB | 1MB=1024*1KB |
1GB | 1GB=1024*1MB |
1TB | 1TB=1024*1GB |
… |
Java是一门强类型的语言。针对于每一种数据都提供的对应的数据类型
后面专门介绍
数据类型转换的依据:取决于数据的取值范围
我们将取值范围小的数据保存到取值范围大的数据类型中的时候是可以自动转换类型的
public class DataTypeDemo{
public static void main(String[] args){
// 1.数值类型 八个基本数据类型
byte b1 = 100;
short s1 = 300;
int i1 = 999;
long l = 1234567890l;
// 自动类型转换
short s2 = b1; // byte --> short
int i2 = s1 ; // short --> int
long l2 = i1; // int --> long
// 2.浮点型
float f1 = 1234.567f;
double d1 = 1234.567d;
double d2 = f1;
// 3.字符型
char c1 = 'a';
// 4.boolean
boolean b2 = true;
boolean b3 = false;
}
}
我们将取值访问比较大的变量赋值给取值范围比较小的变量,那么此时会出现数据的丢失,所以此时我们需要强制类型转换。
public class DataTypeDemo{
public static void main(String[] args){
// 1.数值类型 八个基本数据类型
byte b1 = 100;
short s1 = 300;
// 强制类型转换
byte bb2 = s1; // short --> byte
System.out.println("b2 = " + bb2);
}
}
编译的时候会出现如下的错误
此时为了避免这个错误,我们需要强制类型转换
目标类型 变量名 = (目标类型) 被转换的类型;
public class DataTypeDemo{
public static void main(String[] args){
// 1.数值类型 八个基本数据类型
byte b1 = 100;
short s1 = 300;
// 强制类型转换
byte bb2 = (byte)s1; // short --> byte
System.out.println("b2 = " + bb2);
}
}
做数据类型的强制转换的时候会有数据溢出
和数据丢失
的可能.所以在做数据的强制类型转换的时候一定要谨慎!
在 byte、short、char在转换的时候系统会帮助我们做一些处理,我们在赋值给byte,short,char时,如果赋予的值在对于类型的范围之内,系统会帮助我们自动完成转换,次场景下我们不需要强制内容转换。
// 特例
byte by2 = 100;
//byte by3 = 129;
//short short1 = 32768;
char c1 = 65536;
System.out.println(c1);
byte类型和char类型转换及short类型和char类型相互转换都是需要强制类型转换的
// short和byte类型 同 char类型转换的时候都需要强制类型转换
byte by4 = 120;
char c2 = (char)by4;
System.out.println(c2);
char c3 = 'd';
byte by5 =(byte) c3;
System.out.println(by5);
short s2 = 666;
char c4 = (char)s2;
System.out.println(c4);
当表达式运算符两边的类型不一致的时候,结果的类型会自动向高类型转换
// 表达式类型的提升
double d = 2.67;
int i3 = 50;
int i4 = d + i3; // double 和 int 会提升到 double
System.out.println(i4);
解决方式
int i4 = (int)d + i3; // double 和 int 会提升到 double
int i4 =(int)(d + i3);
当byte,short,char之间参与运算的时候,底层都会转换为int类型来计算。
char c5 = 'a';
short s3 = (short)(c5 + 1); // c5 + 1 得到的结果的类型是int
System.out.println(s3);
char c6 = 'A';
byte b6 = 1;
short s4 = (short)(c6 + b6);
System.out.println(s4);
在Java中boolean是不能参与运算和转换的。
boolean bool1 = false;
System.out.println(bool1 + 1);
short s5 = bool1;
当字符串类型的数据和其他数据做加法运算的时候都是之间拼接的
String ss = "HelloWorld";
System.out.println(ss + 2.5);
// 20101010
System.out.println(10 + 10 + "10" + 10 + 10);
如果表达式是变量组成的,那么我们说讲的特例是不生效的,特例只针对常量
byte b7 = 20 + 30;
System.out.println(b7);
byte b8 = 30;
short s6 = 50;
byte b10 = (byte)(b8 + s6);
System.out.println(b10);
byte b9 = 10;
byte b11 = (byte)(b8 + b9);
System.out.println(b11);
+,-,*, / 、% 、++ 、 –
System.out.println(+20); // 表示 正数
System.out.println(3+4); // 两数相加
System.out.println("Hello" + 666); // 拼接
System.out.println(5-3); // 2
System.out.println(-3); // -3
System.out.println(5*3); // 15
System.out.println(5/3); // 1
System.out.println(5%3); // 2
System.out.println(2%4); // 2
System.out.println(5/(double)3); // 1.666667
System.out.println((double)5/3); // 1.666667
++ – 属于单目运算
++ 表示自增1 – 表示自减1
单独使用
表示自增或者自减,没有任何的区别
public static void main(String[] args)
{
int a = 10;
int b = 20;
// a = 10 b = 20
System.out.println("a = " + a + " b = " + b);
//a ++;
//b --;
// a = 11 b = 19
//System.out.println("a = " + a + " b = " + b);
++ a ;
-- b ;
// a = 11 b = 19
System.out.println("a = " + a + " b = " + b);
}
参与运算
// ++ -- 参与运算
int a1 = 3;
int a2 = 4;
int result = (a1++)/3 + (--a2)*2 -(a1--)%6 + (a2++)*3 - (a2--);
System.out.println("a1=" + a1 + " a2="+a2 + " result="+result);
课堂练习:
普通的 = 扩展的 += -+ *= /= %=
public static void main(String[] args)
{
// 赋值运算符 这个不是==赋值语句
int a = 10 ; // 表示将常量10赋值给变量a地址所对应的内存区域中
a += 3; //等价于a = a + 3
System.out.println(a);
a -= 3; // 等价于 a = a - 3;
System.out.println(a);
}
面试题1
: short s1 = 1 ; ? s1 = s1 + 1; 有什么错?
short s1 = 1; s1 += 1; 又有什么错?
short s1 = 1;
s1 = s1 + 1; // 报错 需要强制类型转换
s1 += 1; // 不会 += 会帮助我们自动完成强制类型转换
面试题2
:如何交换两个数?
int x = 10;
int y = 20; // 互换x和y的值
int c = x;
x = y;
y = c;
解决方案:声明一个中级变量即可
> < >= <= != ==
关系运算符得到的结果都是boolean类型的数据(true和false)
public static void main(String[] args)
{
int a = 10;
int b = 20;
System.out.println(a > b) ; // false
System.out.println(a < b) ; // true
System.out.println(a >= b) ; // false
System.out.println(a <= b) ; // true
System.out.println(a != b) ; // true
System.out.println(a == b) ; // false
}
连接多个boolean类型的表达式
boolean类型的表达式1 boolean类型的表达式2 boolean类型的表达式3 boolean类型的表达式4
& 按位与 | 按位或 ^ 异或
public static void main(String[] args)
{
int a = 10;
int b = 20;
// 按位 & 都为true 结果 true
System.out.println((a > b ) & (a < b)) ; // false & true = false
System.out.println((a < b ) & (a > b)) ; // true & false = false
System.out.println((a < b ) & (a < b)) ; // true & true = true
System.out.println((a > b ) & (a > b)) ; // false & false = false
System.out.println("----------------------------");
// 按位 | 有true 就为true
System.out.println((a > b ) | (a < b)) ; // false | true = true
System.out.println((a < b ) | (a > b)) ; // true | false = true
System.out.println((a < b ) | (a < b)) ; // true | true = true
System.out.println((a > b ) | (a > b)) ; // false | false = false
System.out.println("----------------------------");
// 按位 异或 相同为false 不同为true
System.out.println((a > b ) ^ (a < b)) ; // false ^ true = true
System.out.println((a < b ) ^ (a > b)) ; // true ^ false = true
System.out.println((a < b ) ^ (a < b)) ; // true ^ true = false
System.out.println((a > b ) ^ (a > b)) ; // false ^ false = false
}
按位符号也会运用在位运算
,位运算操作要比普通运算的效率要高很多
&:有0取0,否则取1
1001 & 0110 = 0
1 0 0 1
& 0 1 1 0
----------
0 0 0 0
|:有1取1,否则取0
1001 | 0110 = 15
1 0 0 1
| 0 1 1 0
----------
1 1 1 1
^:相同为0 不同为1
1001 ^ 0110 = 15
1 0 0 1
^ 0 1 1 0
----------
1 1 1 1
&& 短路与 || 短路或者 ! 非
& 表示按位与,无论什么情况都会同时计算运算符两边的表达式
&& 表示短路与,如果前面的表达式为false,那么无论后面的表达式结果如何,都不会去计算后面表达式的值。因为后面表达式的值不会影响结果
同时注意:在实际使用中我们很少使用按位与,更多的是使用短路与
!:取反
当!的个数是奇数个的时候,结果相反
当!的个数是偶数的时候,结果不变
面试题:& 与 && 的区别
位运算符:用来计算二进制的运算符
& | ^ ~ << >> >>> 补码
条件运算符又称为三目运算
格式: X ? Y : Z ;
X 表达式必须是boolean类型的表达式
计算流程:
1. 首先计算X的值
2. 如果X为true,那么整个表达式的结果就是Y的值
3. 如果X为false,那么整个表达式的结果就是Z的值
表达式的定义:符合一定的语法规则的运算符
和操作数
的序列
运算符:算数运算符,赋值运算符,关系运算符,逻辑运算符,位运算符(了解), 三目运算符
操作数:变量或者常量
a + b
a * 64 - 3
x ? y : z
(x > y) && (100 > z)
表达式的值:整个表达式的结果
表达式的类型:整个表达式的结果的类型
表达式的优先级:
i < 30 && i%10 !=0
优先级不用去背!!!
优先级 | 描述 | 运算符 |
---|---|---|
1 | 括号 | ()、[] |
2 | 正负号 | +、- |
3 | 自增自减,非 | ++、–、! |
4 | 乘除,取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | >、>=、<、<= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ?: |
15 | 赋值运算 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、|=、<<=、>>=、>>>= |
运算符的优先级:
( )
可以显著的提高程序的可读性
为了便于查询,以下列出ASCII码表:第128~255号为扩展字符(不常用)
ASCII码 | 键盘 | ASCII 码 | 键盘 | ASCII 码 | 键盘 | ASCII 码 | 键盘 |
27 | ESC | 32 | SPACE | 33 | ! | 34 | " |
35 | # | 36 | $ | 37 | % | 38 | & |
39 | ’ | 40 | ( | 41 | ) | 42 | * |
43 | + | 44 | ’ | 45 | - | 46 | . |
47 | / | 48 | 0 | 49 | 1 | 50 | 2 |
51 | 3 | 52 | 4 | 53 | 5 | 54 | 6 |
55 | 7 | 56 | 8 | 57 | 9 | 58 | : |
59 | ; | 60 | < | 61 | = | 62 | > |
63 | ? | 64 | @ | 65 | A | 66 | B |
67 | C | 68 | D | 69 | E | 70 | F |
71 | G | 72 | H | 73 | I | 74 | J |
75 | K | 76 | L | 77 | M | 78 | N |
79 | O | 80 | P | 81 | Q | 82 | R |
83 | S | 84 | T | 85 | U | 86 | V |
87 | W | 88 | X | 89 | Y | 90 | Z |
91 | [ | 92 | \ | 93 | ] | 94 | ^ |
95 | _ | 96 | ` | 97 | a | 98 | b |
99 | c | 100 | d | 101 | e | 102 | f |
103 | g | 104 | h | 105 | i | 106 | j |
107 | k | 108 | l | 109 | m | 110 | n |
111 | o | 112 | p | 113 | q | 114 | r |
115 | s | 116 | t | 117 | u | 118 | v |
119 | w | 120 | x | 121 | y | 122 | z |
123 | { | 124 | | | 125 | } | 126 | ~ |