java基础复习(二)
一、 基本语法
- 如果一个源文件中什么内容都没有,编译会不会生成 字节码文件?不会
- 如果一个类中没有主方法(如下图),编译运行会怎么样?编译可以通过,但运行报错
: 没有主方法
主方法 :
是一个特殊的方法 ,是程序的入口,JVM开始执行的地方
3.我们的代码最小的存在单位是类
1) 类 主方法(方法) 叫结构性的代码 后面是不需要; (分号)【规范要求】
2) 功能执行语句,例如 打印语句 后面必须加上;
类中不能够写功能执行语句, 例如打印语句
4.所有的标点符号都必须是英文状态下的
5.Java代码中是严格区分大小写
6.字节码文件的名字和类名一致,建议源文件名字和类名一
7.一个Java源文件中可以写多个并列的类,编译完毕之后会生成多个独立的字节码文件
建议 : 在实际开发中一个java文件中只写一个类
8.一个类可以使用public修饰
如果一个类使用public修饰,必须和源文件名字一致,而且我们一般也只会在一个java文件里写一个类,不建议写多个类。
一个源文件中,至多只能有一个类可以被public修饰
二、 Java注释
1.写法:
1) // 单行注释,注释一行(是以行终止符为准)
2) /* */ 多行注释,可以注释多行
每一行前面都加* 只是为了好看
3) /** */ 文档注释,效果很像多行注释,也可以注释多行,特点 :可以通过一个命令javadoc 把文档注释中的内容生产文档
注意 :单行注释 和 多行注释不能 相互嵌套
2.写的时间:
写代码时候养成写注释的习惯--》 代码的可读性增强
1) 思路 流程
2) 关键代码
3) 类的整体描述; 字段 方法 构造方法前面都会写注释
三、 分隔符
分号(;):语句的分割,表示一句话结束,好比咱们使用的句号。
花括号({}):表示一个代码块,是一个整体,花括号要成对使用。
方括号([]):定义数组和访问数组元素时使用。
圆括号(()):使用很广泛,具体用到细讲。
圆点(.):类和对象访问它的成员时使用。
空格( ):把一整条语句分割成几段,空格的次数不限制。
一般单词之间一个空格就可以了
注意:必须都是半角下的英文符号。
四、保留字和关键字
Java关键字: Java语言设计之初,被赋予特殊意义的单词。
通常用来程序控制,错误处理,基本类型,类,方法和变量修饰符……等等
共同点:
所有的字母全部小写
break |
||||
case |
const |
|||
continue |
||||
float |
||||
goto |
||||
long |
native |
|||
new |
||||
try |
详见 java关键字文档
这些是否是关键字?Class System String
保留字:goto const 在java中现在还没有赋予它特殊意义,以后可能会用,预留起来
标识符:为了增强程序的阅读性而自定义的名称。比如:类名,方法名,变量名等
标识符的命名规则:
u 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_),数字(不能以数字开头)开始
u 关键字不能用作标识符
u 标识符是大小写敏感的
u 合法标识符举例:age、$salary、_value
u 非法标识符举例:123abc、-salary
书写建议:
ü 一般来说都是取一些有意义的单词
ü 类名首字母必须大写
ü 方法名,变量名 首字母小写
ü 如果是有多个单词组成,后面每一个单词首字母大写(驼峰法命名)
小结:关键字是语言本身给定义的,而标识符是我们自己来命名的,这些单词都是为了让我们能够更好的理解程序,统一大家的认知,使得程序员之间、程序员与机器之间都能够良好的沟通。条条框框虽多,但是都值得遵守。
五、数据类型
1. 数据类型概述
123,3.14
在java中不同类型的数据有不同的数据类型,看看下面的数据类型的分类:
分类:
一、基本数据类型 *8 java预定义的类型(原生数据类型)
1.整数类型 *4 123
byte 1个字节8位
short 2字节16位
int 4字节32位
long 8字节64位
2.小数类型(浮点类型) *2 3.14
float 单精度 4字节32位
double 双精度 8字节64位
3.字符类型 *1
char 2字节16位 ‘A’,’B’
4.布尔类型*1
boolean 俩值 true ,false
二、引用数据类型
类,数组,接口,枚举……
备注:浮点型就是小数类型。
Java中每个变量都有一种类型,类型限制了变量可以是哪些值,举个例子:
2. 进制(了解即可)
1) 10进制 (逢10进1)
其中的符号可以是 0 1 2 3 4 5 6 7 8 9 10
2) 2进制 (逢2进1)
其中的符号可以是 0 1 110等于10进制的2 第一位1 ==2*’1‘ 2*2 第二位1==2
3) 8进制 (逢8进1)
其中的符号可以是0 1 2 3 4 5 6 7 10等于10进制的8
4) 16进制(逢16进1)
其中的符号可以是0 1 2 3 4 5 6 7 8 9 A B C D E F 11等于10进制的17
进制转换: 100000
3.基本数据类型(8种)
1、整型
为什么会有不同大小的类型,举个例子比如存 5 这个数据怎么存的?
- byte(8位,-2^8--2^8-1范围是-128到127)
- short(16位,-32768—32767)
- int(32位,-2147483648—2147483647)
- long (64位,-9223372036854775808—9223372036854775807)
注意:给long赋值时,因为整数默认是int类型,要转换为long类型的值,后面加上l或L
上面的byte short int long 最大长度可以通过jdk文档去找到 具体的范围。
- 同一个整数可以使用不同的进制表示:
默认的进制10进制
二进制: 是 0b 或者 0B开头
八进制: 是0开头
十六进制: 0X (0x) 开头
上面输出的是 10进制
Java7 开始 支持数字之间用 _ 分割
2、浮点型(小数型)
A. float(单精度32位) 直接赋值时必须在数字后加上f 或F
B. double( 双精度64位)
区别:
对于单精度浮点数,运行速度相比double更快,占内存更小,但是当数值非常大或者非常小的时候会变得不精确。
双精度比单精度表示的位数大 精确的位数多,简单地说, float表示的小数点位数少。
默认浮点数的类型是 double
表现形式:
- 常规 3.14
- 科学计数法
例如 3.14e2 3.14e-2
注意:
表示float 类型 必须加上f 或者F
float double 不能精确表示一个小数,例如 1.3*1.4
例如 double num= 1.0, 是一个无限接近1.0的一个值
那怎么更精确的表示浮点数呢?BigDecimal
结论:浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是 因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用 float 和 double 作精确运 算的时候要特别小心。
3、字符
A:char 16 位[0-65535] (2个字节,16位) 。字符常量使用单引号 ‘’包裹起来。
表现形式:
- ‘A’最常用,最直观的方式
- 使用一个数字表示,对应有一个ASCII码表
例如:char c = 65;//表示 ’A’ 这个字符
可以当成一个整数来使用,什么是asscii表,就像化学元素周期表
‘A’-》65(10进制)-》41(16进制)
怎么表示? ‘\u0041’
特殊符号(需要使用转义符号转义)
\’ \” \\ \r(回车) \n(换行) \t(制表符Tab)
4、布尔类型
值只有两个 true false,不能使用 0 1表示
4. 引用类型
数组 ,类,接口,枚举……
String类:
String是 java中已经设计好的一个类,表示的值是字符串(Java中设计的类和我们自己设计的类的性质是一样的)
String s = “你好”;
当String 和 + 一起使用的时候,这时候+ 是拼接字符串的功能
System.out.println(“你好”+2);//结果为 你好2
int a = 5;
int b = 10
System.out.println(“a=”+a+”,b=”+b); //结果为a=5,b=10
六、数据类型转换
小数默认为double类型, 整数默认为int类型!
在Java中,boolean类型与所有其他7种类型都不能进行转换。
下面这7种数据类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化:
byte --> short ,char --> int --> long --> float --> double
如果从小转换到大,(除了byte不能自动转换char ,以及char不能自动转换short)可以自动完成转换。而从大到小,必须强制转换(强制转换前必须知道被转换的值在要转换的类型范围内)。
规律:有包含关系的可以由低精度赋值给高精度。
为什么float 在long 后面?
小数(浮点数) 的存储方式,结构和整数不一样
1. 自动转换
1) long float double
只要两个操作数中有一个是上面类型的,另一个就会被转换成相应类型,并且结果也是该类型,例如:
int num = 10;
double b = 10.01;
double c = num + b;
System.out.println(c);
2) 如果2个操作数(包括byte,short,char,int),都将会转换为int类型,并且结果也是int
例如:
short s = 10;
int num = 20;
int n = num + s;
System.out.println(n);
byte b=3;
b=(byte)(b*3);//必须声明byte。
System.out.println(b);
3) char类型向更高长度类型(例如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换
例如:
char c = 'A';
int num = 10;
int a = c+num;
System.out.println(a);
需要注意的是:char型具有两个字节,其数值范围是0 ~ 2^16-1,这直接导致byte型不能自动类型提升到char,char和short直接也不会发生自动类型提升(因为值范围问题),同时,byte当然可以直接提升到short型。
所以,char 不能和byte short 相互自动转换
4) 特例
byte b = 100;//可以自动转换
int k =100;
byte b2 =k;//不能转换,报错
我们是把一个常量直接赋值给byte变量,由于编译器能识别100,知道在byte范围之内,所以通过编译。
byte b2 =k; 在编译时候,k是int型,但它是一个变量,编译器不能知道变量中值是多少,所以不能隐式转换,提示你可能精度损失。
5) 数据类型过长 和 溢出
byte b = 128;//超出byte范围
long intMax = int最大数(查jdk文档)
int i =10;
double d = i;//相当于把i中的值又复制一份到变量d中。
2. 强制转换
高 转 低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降.
比如说:double 转 float
示例:
int i1=123;
int i2=456;
float f1 = (float) ((i1+i2)*1.2); //容量大的类型转换为小容量的类型时,需要加上强制转换符
byte b1=1;
byte b2=2;
byte b3=(byte)(b1+b2); //byte,short,char在计算时首先转换为int,大容量(int)转换为小容 量的类型(byte)时要加强制转换
short i=99;
char c=(char)i;
System.out.println(c);
特例:
int a = 129;
byte b = (byte)a;
System.out.println(b); // 结果为 -127
如果值比long还大 ---》怎么办?
七、常量
1. 常量介绍
Java中的常量,常量就是一个固定不变的量(或者值)。例如 123,45,1.2,false等。
常见的分类
① 整数常量 例如:123 ,250,666
② 小数常量 例如:1.2,3.14
③ 字符串常量 例如:”12345”
④ 字符常量 例如: ‘2’,‘B’
⑤ 布尔常量 例如:true ,false
------>上面的5中表示形式的常量都可以直接放在打印语句中打印
2. 常见转义字符
①\n表示换行;
②\t表示制表符,相当于Table键;
③\b表示退格键,相当于Back Space键;
④\'表示单引号;
⑤\''表示双引号;
⑥\\表示一个斜杠\。
八、变量
1. 变量是什么
通俗一点,变量就是一个容器。我们对容器的概念就是它的作用是能够装一个东西。一个变量在同一时间只能存储一个数据。
举例:
如果我们把变量比作是酒店的房间,要存储的数据就好比要住宿的客人,我们可以根据客人的要求安排其入住“标准间”或者是“总统套房”,并且可以根据房间名字快速查找到入住客人的信息。
同理,在 Java 程序中,我们也可以根据所需要保存的数据的格式,将其保存在指定类型的变量空间中,并且通过变量名快速定位!
变量类型------数据类型
2.变量的语法
1) 假设一个场景,现在有一个人的年龄18,希望使用一个变量存储起来,怎么做?
a) 必须获得一个变量容器(声明 或者定义一个变量)
语法格式: 数据类型 变量名; 注意: 此处的数据类型可以是Java中支持的所有的数据类型! 示例: int age; |
按照刚刚的语法格式,示例 :int age; 表示声明了一个变量,变量名叫age可以看成是一个空的变量(里面没有数据)
b) 把数据存储到变量中,使用赋值符号赋值 =
先声明再赋值
int age;
age = 18;
声明的时候同时赋值
int age = 18;// 规范:赋值符号=两边都加上一个空格
可以重复赋值
age = 20;
c) 取出变量中的数据
使用(取出其中的数据) ---》 直接使用变量即可
取出值来打印
System.out.println(age);
错误用法:打印System.out.println(“age”);
取出值参与一些运算
两个年龄相加
错误用法:
int age = 18;
age2 = 10;
System.out.println(age + age2);
把值进行传递(后面讲了 方法 后大家再去进一步了解)
记住一点,我们在使用变量的时候其实关心的还是变量盒子中的数据,变量仅仅是一个载体而已。
3.变量分类
1) 成员变量
直接声明在类中的变量;
主方法使用static修饰,静态的区域,如果打印成员变量报错:
怎么解决上面问题?
a) 把主方法的static 去掉(但是找不到主方法)
b) 成员变量age也使用static 修饰
成员变量如果没有赋值,那么系统会分配默认值(不同的数据类型有不同的默认值,这点请参考数据类型);
作用域范围:
整个类中可以访问的范围;
可以放在方法的上面 ,也可以放在下面
1) 局部变量
直接声明在方法内部,比如main方法的形参 或者 大括号中
作用域范围:
声明在局部区域,例如方法里面大括号的范围内
局部变量 必须放在使用的功能语句前面;
2) 区别
a) 局部变量在使用之前必须得有值,试想一下一个空变量盒子你用啥呢?
b) 成员变量系统会分配默认值(默认值意义不大)
c) 作用域范围不同
3) 问题
同一个作用域范围之内能不能够有两个名字一样的变量 , 为什么?
4.总结
变量是用来干啥的?
变量有如下的一些特点:
1) 必须先声明变量再使用变量(先得有一个变量盒子,然后在拿来装东西);
2) 每一个变量都有一个名字,方便使用;
3) 都有一种数据类型,不同类型的变量盒子中装不同的数据;
提一下
在 Java 的领域里,基本数据类型变量存的是数据本身,
而引用类型变量存的是保存数据的内存空间地址。
基本数据类型变量里存储的是直接放在抽屉里的东西,而引用数据类型变量里存储的是 这个抽屉的钥匙,钥匙和抽屉一一对应。
九、表达式
l其实就是由一系列的 常量 变量 运算符,括号()组成的一个算式,为了按照一定的运算规则计算出结果值.
举例:
3+2
3+5*(2+3)
写一些表达式有什么用?
为了按照一定的运算规则计算出结果值
当遇到表达式的时候,我们应该用整体思想,把它看成一个值。