Java语言基础组成
1、关键字
2、标识符
(1)就是给类,变量,方法起名字。
(2)组成规则:
由数字0-9,英文大小写字母,$以及_组成。
(3)注意事项:
A:只能有组成规则规定的内容组成。
B:不能以数字开头。
C:不能是Java中的关键字。
D:区分大小写。
A:包(文件夹,用于区分同名的类)
全部小写。如果多级包,用.分开。
举例:
com一级包
xxx.interview二级包
注意:www.xxx.com(域名反写)
B:类和接口(定义类与接口)
如果是一个单词,首字母大写。
举例:
Demo,Test,Student
如果是多个单词,每个单词的首字母大写。
举例:
HelloWorld,StudyBlog
C:变量和方法
如果是一个单词,首字母小写。
举例:
name,age,show(),method(),main()
如果是多个单词,从第二个单词开始每个单词的首字母大写。
举例:
showName(),studentName()
D:常量
全部大写,如果多个单词组成,用_连接。
举例:
PI,STUDENT_MAX_AGE
3、注释
注释:就是对程序的解释性文字。
注释的分类:
A:单行注释
1、以//开头,以回车结束。
2、单行注释是可以嵌套单行注释的。
B:多行注释
1、以/*开头,以*/结束。
2、多行注释是不可以嵌套多行注释的,但可以嵌套单行注释。
C:文档注释(了解)
将来被Javadoc工具解析,生成一个说明书。
注释的作用:
1、解释程序,提高程序的阅读性。
2、可以调试错误。
对于单行注释和多行注释,被注释的文字,不会被JVM(Java虚拟机)解释执行。
对于文档注释,是Java特有的注释,其中注释内容可以被JDK提供的工具Javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。
学习友情建议
注释是一个程序员必须具有的良好编程习惯。
初学者编写程序可以养成习惯:先写注释再写代码。
将自己的思想通过注释先整理出来,在用代码去体现。
因为代码仅仅是思想的一种体现形式而已。
注视格式:
单行注释://
多行注释: /* */
文档注释: /** */
建议:写代码之前写需求,思路,步骤,养成一个良好的习惯,以后一旦思想确定,后面写代码就是行云流水。
如下一个Hello 程序员的小程序:
/*
1、需求:
编译一个Hello 程序员!!的小程序
2、思路:
1)通过Java关键字class定义一个类
2)通过Java特殊字main定义一个主函数
3)定义一个输出语句,打印下Hello 程序员!!
3、步骤:
1)class Demo 定义一个类
2)public static void main(String[] args) 定义一个主函数
3)System.out.println("Hello 程序员!!");定义一个输出语句
*/
//创建一个类。
class Test{
//主函数是程序的入口。
public static void main(String[] args){
//输出语句,可以打印小括号内容。
System.out.println("Hello 程序员!!");
}
}
4、常量和变量
常量:表示不能改变的数值。
(1)在程序的运行过程中,其值是不可以发生改变的量。
(2)常量的分类:
1)整数常量
12,-23
2)小数常量
12.5,-65.43
3)字符常量
'a','A','0'
4)字符串常量
"Hello"
5)布尔常量
true,false
6)空常量(后面讲)
null
7)自定义常量(后面讲)
(3)常量可以直接被输出。
(4)进制
1)是一种进位的方式。X进制,表示逢x进1。
2)Java中整数常量的表示
A:二进制 由0,1组成。以0b开头。JDK 1.7以后的新特性。
B:八进制 由0-7组成。以0开头。
C:十进制 由0-9组成。默认就是十进制。
D:十六进制 由0-9,A-F(不区分大小写)组成,以0x开头。
3)进制转换:
A:其他进制转十进制
系数:就是每一位上的数据。
基数:X进制,基数就是X。(也就是进制)
权:在右边,从0开始编号,对应位上的编号即为该位的权。
结果:把系数*基数的权次幂相加即可。
B:十进制到其他进制
除基取余,直到商为0,余数反转。
变量:就是讲不确定的数据进行存储,也就是需要在内存中开辟一个空间。
(1)程序的运行过程中,在指定范围内发生改变的量。
(2)格式:
格式1:
数据类型 变量名 = 初始化值;
格式2:
数据类型 变量名;
变量名 = 初始化值;
举例:
方式1:
byte b = 10;
方式2:
byte b;
b = 10;
个人理解:变量就如同数学中的未知数。
数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
数据分类
1)基本类型:4类8种。
整型:占用字节
byte(1)short(2)int(4)long(8)
布尔型:
boolean(1) 不明确。可以认为是1个字节。(即8个bit位)
只有俩字结果,一个是true,另一个是false。
字符型:
char(2)
浮点型:
float(4)double(8)
2)引用类型:类,接口,数组。(先了解)
注意:
整数默认是int类型。long类型需要加L或者l后缀。
浮点数默认是double类型。float类型需要加F或者f后缀。
类型转换
1、boolean类型不参与转换。(因为boolean值是常量,默认只有俩个值,要么true,要么false)
2、隐式转换(从小到大)
自动类型提升,从小到大的提升。
(byte,short,char) --> int --> long --> float --> double
3、强制转换(从大到小)
强制类型转换,从大到小的转换。
int b;b=(byte)(b+2)
格式:
(数据类型) 数据;
表达式的数据类型自动提升。
所有byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型。
如果一个操作数是float型,计算结果就是float型。
如果一个操作数是double型,计算结果就是double型。
分析:
System.out.println(‘a’)与System.out.println(‘a’+1)的区别。
System.out.println(‘a’)打印的是a。
System.out.println(‘a’+1)打印的是98,自动类型提升,把a转换成ASCII编码值(97)与1相加。
变量的什么时候定义?
当数据不确定时,需要对数据进行存储时,就定义一个变量来完成存储动作。
转义字符
\n :换行
\b :退格
\r :按回车
\t :制表符
面试题:
byte b = 4;b = 3+7;
System.out.println(b);//打印出来是10
------------------------------------------------
byte b = 4;byte b1 = 3;byte b2 = 7;
b = b1 + b2;
System.out.println(b);
提示可能损失精度
byte编译器在编译的时候,右边默认是整型,但是他会判断.这数字在不在byte字节这个范围之内(-128~127)。
如果在的话,把这个4做了一个默认的强转,把最后一个字节赋到b中,这时b是在byte范围内所以编译不会报错。
b1和b2是变量,是不确定的值,不能检查。
int
int x1 =Integer.MAX_VALUE;//2147483647Z最大数
int
x = x1+x2;
System.out.println(x);//不出错,打印出来是负数。
int是默认类型,一旦超出范围,底层有强制转换过程,只保留自己原有位,高位全舍弃。
5、运算符
(1)就是把常量和变量连接的符号,一般参与运算使用。(就是算法,1+1)
(2)分类:
算术运算符 +,-,*,/,%,++,--
+):正号,加法,字符串连接符。
例:
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5
%):取得余数
规律:
左边如果大于右边,结果是余数。//10%5=0
左边如果小于右边,结果是左边。//5%10=5
左边如果等于右边,结果是0。 //5%5=0
正负号跟左边一致。 //-11%5=1
++与--:
++ 其实相当于把数据+1
- - 其实相当于把数据-1
规律:单独存在时,在数据的前后,结果一致。
参与操作使用:
如果在数据的后边,数据先操作,在++/--。(小明先玩后吃饭)
如果在数据的前边,数据先++/--,在操作。(小明先吃饭后玩)
赋值运算符 =,+=,-=,*=,/=,%=
int a = 10;//把10赋值给int类型的变量a。
a += 20;//把左边和右边的和赋值给左边。
注意事项:
a = a + 20;
a += 20;//等于a=a+20。
结果是等价的,理解不是等价的。
因为+=这种运算符,内含了强制类型转换功能。
比如:
short s = 2;
s+=3;
等价于 s = (short)(s+3);
关系运算符 ==,!=,>,>=,<,<=
特点:关系运算符的结果都是boolean类型。而且只有俩个值(true | false)
请千万注意:== 不要写成 =
逻辑运算符
&与运算 |或运算 ^异或运算 !非运算 &&短路与运算 ||短路或运
&:符号的运算特点:
true & true = true;
true & false = false;
false & true = false;
false & false = false;
&与运算规律:
&运算的两边只要有一个是false,结果肯定是false。
只有两边都为true,结果才是true。
|:符号的运算特点:
true & true = true;
true & false = true;
false & true = true;
false & false = false;
|或运算规律:
|运算的两边只要有一个是true,结果肯定是true。
只有两边都为false。结果是false。
^与|:异或和或有点不一样。
^:运算特点。
true ^ true= false;
true ^ false = true;
false ^ true = true;
false ^ false = false;
^异或运算规律:
^符号的两边结果如果相同,结果是 false。
两边的结果不同,结果是true。
!:非运算,判断事物的另一面。
!true =false
!false=true;
!!true=true;
面试题:
&&和&运算的结果是一样的。但是运算过程有点小区别。
&:无论左边的运算结果是什么,右边都参与运算。
&&:当左边为false时,右边不参与运
||和|运算的结果是一样的。但是运算过程有点小区别。
|:无论左边的运算结果是什么,右边都参与运算。
||:当左边为true时,右边不参与运算的。
位运算是直接对二进制进行运算
<<左移运算 >>右移运算 >>>无符号右移运算 &与运算 |或运算 ^异或运算 ~反码运算
<<左移几位其实就是该数据乘以2的几次方。
左移:可以完成2的次幂运算
>>右移几位其实就是该数据除以2的几次幂。
右移:对于高位出现的空位,原来高位是什么就用什么补这个空位。
>>>:无符号右移:数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。
^:一个数异或同一个数两次,结果还是这个数。
练习:
对两个整数变量的值进行互换(不需要第三方变量)
代码:
x= x + y;//x = 3 + 5; x = 8;
y= x - y;//3+5-5 = 3;y = 3;
x= x - y;//3+5-3 = 5;x = 5;
这种方式建议不要用,如果两个整数的数值过大,会超出int范围,会强制转换。数据会变化。
开发时,使用第三方变量的形式,因为阅读性强。
int x = 3,y = 5;
int temp = x;
x = y ;
y = temp;
Sytem.out.println("x="+x+",y="+y);
面试的时候用。
x= x ^ y;//x = 3 ^ 5;
y= x ^ y;//y = (3^5)^5; y = 3;
x= x ^ y;//x = (3^5)^3; x = 5;
Sytem.out.println("x="+x+",y="+y);
三元运算符
格式:(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为flase,运算后的结果是表达式2;
示例:获取两个数中大数。
int x = 3, y = 4, z;
z = (x>y) ? x:y; //z变量存储的就是两个数的大数。
三元运算符的缺点就是必须要有结果。