ininhi,我是逸尘,一起学java吧
目标(任务驱动)
1.请大体的把主类结构,数据基本类型,常量和变量,运算符,数据类型和转换搞清楚。
场景:第二天,回到公司,项目开始时你回想起了了JAVA的代码语言基础.....
2.请注意代码规范
场景:前辈看了看的你的代码格式,并撤回了一张笑脸,这时你的脑海突然回想起编码的基本规范。
主类结构
package是包的修饰符,标识在什么包内
public
是访问修饰符,表示该class
是公开的,后面我们会介绍到
class
是关键字,这里定义的class
名字就是HelloWorld,他代表的是我们的类,类现在我们可以理解为泛指的统称,比如人类,猫类,
一个程序的基本单位就是class
关键字static
是另一个修饰符,它表示静态方法
返回值是void
,表示没有任何返回值
每一个应用程序都必须包含main(),main()方法是主方法,含有main()方法的类被称为主类,从”{“ 开始到 “}”结束,main方法是程序执行的位置。
package com.ydrj.xb;
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
注意public class HelloWorld的HelloWorld他就是我们的类名,他必须和文件名相同
注意:在java中是严格区分大小写的。
规范:
- 类名必须以英文字母开头且一般首字母大写,后接数字和下划线和字母的组合, 如果一个类名包含两个以上名词,建议使用驼峰命名(Camel-Case)法书写类名,每个名称首字母也应该大写。
数据基本类型
在java中数据类型共有3型4类8种(依次更加精细)
三型
四类
八种
这里我们将四类展开说明
整数类型
byte 、short 、int 、long
这些类型是存放整数的(没有小数部分,可正可负)区分的依据就是所占内存大小。
byte 8位 取值范围:-128~127(-2的7次方到2的7次方-1)
short 16位 取值范围:-32768~32767(-2的15次方到2的15次方-1)
int 32位 取值范围:-2147483648~2147483647(-2的31次方到2的31次方-1)
long 64位 取值范围:-9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)
由上可以看出 byte、short 的取值范围比较小,而long的取值范围最大的,所以占用的空间也是最多的。int 取值范围基本上可以满足我们的日常计算需求了,所以也是我们使用的最多的一个整型类型。
浮点型
float单精度浮点类型 、 double双精度浮点类型
浮点数虽然表示的范围大,但是,浮点数有个非常重要的特点,就是浮点数常常无法精确表示。
所以他属于近似值
float(单精度浮点型) 32位 取值范围:3.402823e+38~1.401298e-45
double(双精度浮点型)64位 取值范围:1.797693e+308~4.9000000e-324
在默认情况下带小数点的字面量默认属于double类型,
所以声明一个float类型的变量时,都要在数字后面加上 "F" 或 "f"。
字符型
char
首先我们要搞清楚什么是字符
简单点字符是各种文字和符号的总称。. 一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号、一个图形符号或者控制符号等。
char 16位
注意的是定义字符时要用单引号,‘a’是一个字符而“a”是一个字符串,字符串我们将在后面学到。
char ch = 'a';
// 也可以是汉字,因为是Unicode编码(Unicode编码后面一节我们会说到)
char ch = '汉';
// 可以是十进制数、八进制数、十六进制数等等。
char ch = 1010;
// 可以用字符编码来初始化,如:'\0' 表示结束符,它的ascll码是0,这句话的意思和 ch = 0 是一个意思。
char ch = '\0';
另外char的一些内容还可以有特殊的意义
我们称为转义字符
他以"\"左斜杠开头,将转换为不同于字符原有的意义。
例如
等等
布尔型
boolean
两个:true 、false 代表真和假,在逻辑判断中使用。
变量和常量
标识符和字面量和关键字
标识符可以理解为名字,在java中可以标识类名,变量名,方法名,数组名,文件名的有效字符序列。
需要注意的是:不能是数字开头,不能是关键字,可以是下划线_或者美元$和数字组成。
字面量 数据在程序中的书写格式(就是告诉我们在代码里数据怎么写,比如真就是是true,比如3就是3,再比如16进制的数6e,\n )也是说数据的写法有什么要求
关键字 就是保留字,在java中已经赋予了特殊的含义,比如public ,int等等 ,这个在我们学习过程会逐渐了解。
常量
常量(constant)在整个过程中只能被赋值一次,不会改变。(再改就会报错)
在java中声明常量语法
//final 数据类型 标识符(常量名称)=字面量;
final PI=3.1415926D;
通过final关键字限定,这样PI(我们通常习惯的把常量名称都大写)就是常量了
变量
声明变量就是要告诉这个编译器这个变量的类型,然后好分配空间,以及可以存放什么类型数据。
赋值代码从右往左看
在java中声明变量语法
//基本数据类型 标识符(变量名称)=字面量(值)
int age=1;
//当然我们也可以不去赋值
int age;
规范:
- 变量的命名规范是有效的标识符,不能重复,且尽量选择有意义的变量名,一般名称首字母小写。
变量的重要特点是可以重新赋值,还可以赋值给其他变量。
package com.ydrj.xb;
public class One {
public static void main(String[] args) {
int age=10;
System.out.println(age);
System.out.println("过了一年");
//第二次重新赋值的时候,变量age已经存在了,不能再重复定义,因此不能指定变量类型int,必须使用语句age = 11;。
age=11;
System.out.println(age);
//赋值给其他变量
int luckyNumber = age;
System.out.println("幸运数字是"+luckyNumber);
}
}
结果
我们还需要注意一点,我们的变量是暂存在内存中的,等到程序执行到某一个点,该变量会被释放掉,也就是有生命周期。
而且变量是有有效范围的,根据可以访问的的区域,我们把变量划分为成员变量(全局变量)和局部变量。
成员变量
成员变量是整个类范围都有效的,一般用于描述类本身所具有的一些属性,那么他也可以分为两种,实例变量和 静态变量(类变量)。
具体的展示
package com.ydrj.xb;
public class Two {
//实例变量
int x=88;
//静态变量
static int y=66;
public static void main(String[] args) {
//对象的知识会在后面学习
Two two = new Two();
System.out.println(two.x);
//可以直接在类中使用
System.out.println(y);
//在其他类中也可以用类.静态变量使用
System.out.println(Two.y);
}
}
比如我们在one类(其他类)我们的静态变量也是可以直接使用Two类的静态变量y的(类.静态变量使用),也就是相比于实例变量,静态变量不需要创建实例就可以跨类使用。
局部变量
在方法体中声明的变量,方法体内容就是在“{}“内的内容。
package com.ydrj.xb;
public class Two {
//成员变量
static int y=66;
public static void main(String[] args) {
//局部变量
int y=11;
//覆盖掉成员变量
System.out.println(y);
}
}
那么基本的变量内容就结束了,关于他在JVM中的主要内存空间堆,栈,方法区我们会在下面讲到。
运算符
运算符是一些特殊的符号,java中提供这些特殊的符号进行数学或者逻辑上的处理。
赋值运算符
在java中”=“是表示赋值,赋值运算符是一个二元运算符(左边和右边两个操作数处理),
注意,他是将右方的数字的值赋予给左边的操作数(一般是标识符)。
int age=11
他的意思就是将11赋值给变量age
在我们学习java中这里一定要注意是在java中”=“是右方的值给赋予给左边的操作,不是传统意义上的等号。
package com.ydrj.xb;
public class Three {
public static void main(String[] args) {
//a,b,c都是局部变量
//将10值赋给a
int a=10;
System.out.println(a);
int b=9;
//右方的值给赋予给左边的操作,从最右开始操作
int c=a=b;
System.out.println(c);
System.out.println(a);
}
}
在这我们可以清楚的了解到,9给b赋值,b给a赋值,a给c赋值
结果如下
算数运算符
+,-,*(乘)/(除)没什么好说的
注意一点就是0不能做除数
int a=10/0;
这个会报错误
%(取余)
需要注意一点的是
“/” 运算符号 相当于是数学中的除号,不同的是除的结果是小数的话,会自动向下取整;
“%”运算符号 在运算符号左边的数字小于右边的数字的时候 取模结果是左边的数字,当左右两边的数字大小相同的时候取模结果为0,当左边的数字大于右边的数字的时候运算结果是两数相除之后的余数
package com.ydrj.xb;
public class Three {
public static void main(String[] args) {
int a=1/10;
int b=2/10;
int c=1%10;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
自增自减运算符
我们需要注意的是,++和--不能操作字面量只能操作变量
他可以放在我们的变量之前也可以放在变量之后
这里也是我们需要注意的点
package com.ydrj.xb;
public class Four {
public static void main(String[] args) {
int n=1;
//第一步m=n 把n的值给m 第二步 n=n+1 n+1的值给n
int m=n++;
//第一步n=n+1 n+1的值给n (相当于2+1,这个2是上面n的值) 第二步 z=n 把3赋给z
int z=++n;
System.out.println(m);
System.out.println(z);
System.out.println(n);
}
}
++n是先加值1,而n++先赋给之后再进行加1。
同理--也是如此
比较运算符
比较运算符也是二元运算符,它是用来比较的,结果类型是boolean型,成立true,不成立false。
运算符 | 描述 | 例子 |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 |
package com.ydrj.xb;
public class Four {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println("a == b = " + (a == b) );
System.out.println("a != b = " + (a != b) );
System.out.println("a > b = " + (a > b) );
System.out.println("a < b = " + (a < b) );
System.out.println("b >= a = " + (b >= a) );
System.out.println("b <= a = " + (b <= a) );
}
}
逻辑运算符
假设布尔变量A为真,变量B为假
!是一元运算符反转操作数的逻辑状态,其他是二元运算符。
&&,& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B)为假。 |
| | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A | | B)为真。 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | !(A && B)为真。 |
需要注意的是&&和&都是与运算符,但是使用&&如果第一个条件不满足,则直接输出,不判断,节省计算机的判断,我们称之为”短路”。
package com.ydrj.xb;
public class Four {
public static void main(String[] args) {
//年龄
int age = 20;
//工龄
int seniority=1;
//我们需要25以下,10以上企业经验
//&&是短路运算符,在(seniority>10)为false直接不判断了,返回false
boolean res=((seniority>10)&&(age<25));
System.out.println(res);
}
}
位运算符
位是什么
位来自英文bit,音译为“比特”,表示二进制位。
计算机最小的数据 存储 单位是:字节(Byte)
计算机最小的数据 传输 单位是:位/比特(bit)
八位一字节
11010100是一个8位1字节的二进制数,他的十进制是212。
位运算符是对long、int、short、byte和char这5种类型的数据进行运算的,我们不能对double、float和boolean进行位运算操作。
按位与 &
双目运算,两个位数据内容都是1结果位才是1,否则为0
在这里我们计算-4&6 下面是他的过程
按位或 |
双目运算,两个位数据内容都是0结果位才是0,否则为1
按位取反 ~
0变1,1变0
按位异或 ^
同时为0或者1时为0,结果为0否则为1
移位操作<< ,>>,>>>
还有对二进制进行位移操作
<< 左移
向右移动,且右边部分补0
左移n位就是乘以2的n次方(而左移运算比乘法快得多)
去掉最高位
>> 右移
先判断最高位是0还是1,最左补入最高位,移动同时把最后去掉
>>>无符号右移
最高位只填入0
三元运算符
格式如下
条件式 ?值1:值2
如果条件式是true,就取值1否则取值2
package com.ydrj.xb;
public class Five {
public static void main(String[] args) {
int a , b;
a = 1;
// 如果 a 等于 0 成立,则设置 b 为 20,否则为 30
b = (a == 0) ? 20 : 30;
System.out.println( "值是 : " + b );
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b = (a == 1) ? 20 : 30;
System.out.println( "值是 : " + b );
}
}
运算符优先级
当多个运算符出现在一个表达式中,谁先谁后,这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
下表中具有最高优先级的运算符在的表的最上面
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr-- | 从左到右 |
一元 | ++expr --expr + - ~ ! | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
要记住()的优先级很高而=的优先级很低,其他的在实践中要注意。
数据类型转换
数据类型转换其实是将值从一个类型转换为另一个类型,且根据精度我们可以划分为两种
隐式类型转换和显示类型转化。
隐式类型转换
在低类型转换为高类型,系统自动执行,无需操作。
下列是基本的数据类型涉及到的转换,
byte<short<int<long<float<double
int x=10; //声明int类型的变量x的值为10
float y=x; //将x赋给y y的值就是10
显示类型转化
显示类型转化是将高精度类型转换成低精度类型又称强制类型转换
语法规则
(类型名)要转换的值
int a=(int)9.999; //此时a的值为9
int x=(int)‘d’; //x为100
在执行显示类型转换时,可能会导致精度缺失。
代码规范
要注意的很多,我们要在实践中不断积累,勤加练习
我们这里主要要求大家,简洁明了,风格统一,英文,多注释。
注释
单行注释//
多行注释/**/
文档注释/** */