学Java两个多月了,准备写Java相关知识,多总结(毕竟自己也是小白),以后定期写Java相关博客,一直把Java大致体系学完。只是为了自己方便查阅,有不足可指出。
1、标准输出:
public class HelloJava { public static void main(String[] args) { System.out.println("renzhiyuan学习Java"); } }
1.1)参数:
public:表示的这个程序的访问权限,表示的是任何的场合可以被引用,这样java虚拟机就可以找到。main()方法,从而来运行javac程序。
static:表明方法是静态的,不依赖类的对象的,是属于类的,在类加载的时候main()方法也随着加载到内存中去。
void:main()方法是不需要返回值。
main:此方法是程序执行的入口。
String[] args:从控制台接收参数。
System.out.println:标准输出流(支持文件的输出)
#System.out.println();标准错误输出流
1.2)两个输出流的区别区别:
标准错误流不支持定向输出,只能立即输出。
标准输出流支持定向输出
eg:java HelloJava>>test.txt(非追加>)
1.3)常用转义字符:
//println和print区别是println会换行
// 常用的转义字符
\\ 反斜杠
\' 单引号'
\" 双引号"
\b 倒退一个字符
\n 回车换行
\t 跳格(一个Tab键)
1.4)程序解释:
A:Java程序的最基本单位是类,所以我们要定义一个类。
格式:class 类名
举例:class HelloWorld
B:在类中写内容的时候,用大括号括起来。
C:Java程序要想执行,必须有main方法。
格式:public static void main(String[] args)
D:要指向那些东西呢,也用大括号括起来。
E:你要做什么呢?今天我们仅仅做了一个简单的输出
格式:System.out.println("HelloWorld");
注意:""里面的内容是可以改动的。
(2)Java程序的开发执行流程:
A:编写java源程序(.java)
B:通过javac命令编译生成.class文件
C:通过java命令运行.class文件
2、键盘录入:
2.1)案例
import java.util.Scanner; public class JavaTest { public static void main(String[] args) { Scanner scanner= new Scanner(System.in); System.out.println("你的名字是什么?"); String name = scanner.next(); System.out.println("你家住在哪里?"); String address = scanner.next(); System.out.println("我的名字也叫" + name + address + "很高兴认识你!"); } }
2.2)实现流程:
A:导包
import java.util.Scanner;
位置:在class的上边
B:创建对象
Scanner sc = new Scanner(System.in);
C:获取数据
3、方法:
3.1)方法:就是完成特定功能的代码块。
注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法。
3.2)格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
方法体语句;
return 返回值;
}
修饰符:目前就用 public static。后面再详细讲解其他修饰符
返回值类型:就是功能结果的数据类型
方法名:就是起了一个名字,方便我们调用该方法。
参数类型:就是参数的数据类型
参数名:就是变量
参数分类:
实参:实际参与运算的数据
形参:方法上定义的,用于接收实际参数的变量
方法体语句:就是完成功能的代码块
return:结束方法
返回值:就是功能的结果,由return带给调用者。
3.3)两个明确:
返回值类型:结果的数据类型
参数列表:参数的个数及对应的数据类型
3.4)方法调用
A:有明确返回值的方法
a:单独调用,没有意义
b:输出调用,不是很好,因为我可能需要不结果进行进一步的操作。但是讲课一般我就用了。
c:赋值调用,推荐方案
B:void类型修饰的方法
a:单独调用
3.5)方法的注意事项
A:方法不调用不执行
B:方法之间是平级关系,不能嵌套定义
C:方法定义的时候,参数是用,隔开的
D:方法在调用的时候,不用在传递数据类型
E:如果方法有明确的返回值类型,就必须有return语句返回。
3.6)方法重载
在同一个类中,方法名相同,参数列表不同。与返回值无关。
参数列表不同:
参数的个数不同。
参数的对应的数据类型不同。
3.7)方法重载案例
不同的类型的多个同名方法的比较。
4、关键字
4.1)被Java语言赋予特定含义的单词
4.2)特点:
全部小写。
4.3)注意事项:
A:goto和const作为保留字存在。
B:类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记
5、标识符
4.1)就是给类,接口,方法,变量等起名字的字符序列
5.2)组成规则:
A:英文大小写字母
B:数字
C:$和_
5.3)注意事项:
A:不能以数字开头
B:不能是java中的关键字
C:区分大小写
5.4)常见的命名规则(见名知意)
A:包全部小写
单级包:小写
举例:liuyi,com
多级包:小写,并用.隔开
举例:cn.itcast,com.baidu
B:类或者接口
一个单词:首字母大写
举例:Student,Demo
多个单词:每个单词首字母大写
举例:HelloWorld,StudentName
C:方法或者变量
一个单词:首字母小写
举例:name,main
多个单词:从第二个单词开始,每个单词首字母大写
举例:studentAge,showAllNames()
D:常量
全部大写
一个单词:大写
举例:PI
多个单词:大写,并用_隔开
举例:STUDENT_MAX_AGE
6、注释
6.1)就是对程序进行解释说明的文字
6.2)分类:
A:单行注释//
B:多行注释/**/
C:文档注释(后面讲) /** */
6.3)把HelloWorld案例写了一个带注释的版本。
后面我们要写一个程序的过程。
需求:
分析:
实现:
代码体现:
6.4)注释的作用
A:解释说明程序,提高了代码的阅读性。
B:可以帮助我们调试程序。
7、常量
7.1)在程序执行的过程中,其值不发生改变的量
7.2)分类:
A:字面值常量
B:自定义常量(后面讲)
7.3)字面值常量
A:字符串常量 "hello"
B:整数常量12,23
C:小数常量12.345
D:字符常量'a','A','0'
E:布尔常量true,false
F:空常量null(后面讲)
7.4)在Java中针对整数常量提供了四种表现形式
A:二进制由0,1组成。以0b开头。
B:八进制由0,1,...7组成。以0开头。
C:十进制由0,1,...9组成。整数默认是十进制。
D:十六进制由0,1,...9,a,b,c,d,e,f(大小写均可)组成。以0x开头。
8、进制转换
8.1)其他进制到十进制
系数:就是每一个位上的数值
基数:x进制的基数就是x
权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。
结果:系数*基数^权次幂之和。
8.2)十进制到其他进制
除基取余,直到商为0,余数反转。
8.3)进制转换的快速转换法
A:十进制和二进制间的转换
8421码。
B:二进制到八进制,十六进制的转
9、数据类型
9.1)Java是一种强类型语言,针对每种数据都提供了对应的数据类型。
9.2)分类:
A:基本数据类型:4类8种
B:引用数据类型:类,接口,数组。
9.3)基本数据类型
A:整数占用字节数(字节是计算机中最小的计量单位)
byte1 -128~127
short2 -32768~32767
int 4 -2147483648~2147483647
long8
B:浮点数
float4
double8
C:字符
char2
D:布尔
boolean1
注意:
整数默认是int类型,浮点数默认是double。
长整数要加L或者l。
单精度的浮点数要加F或者f。
10、数据类型转换
10.1)boolean类型不参与转换
10.2)默认转换
A:从小到大
B:byte,short,char -- int -- long -- float -- double
C:byte,short,char之间不相互转换,直接转成int类型参与运算。
10.3)强制转换
A:从大到小
B:可能会有精度的损失,一般不建议这样使用。
C:格式:
目标数据类型 变量名 = (目标数据类型) (被转换的数据);
10.4)思考题和面试题:
A:下面两种方式有区别
float f1 = (float)12.345;
float f2 = 12.345F;
f1其实是通过一个double类型转换过来的,而f2本身就是个float类型。
B:下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
C:字符参与运算
是查找ASCII里面的值
'a'97
'A'65
'0'48
System.out.println('a');
System.out.println('a' + 1);
D:字符串参与运算
这里其实是字符串的连接
System.out.println("hello"+'a'+1);
System.out.println('a'+1+"hello");
System.out.println("5+5="+5+5);
System.out.println(5+5+"=5+5");
11、变量
11.1)在程序的执行过程中,其值在某个范围内可以发生改变的量
11.2)变量的定义格式:
A:数据类型 变量名 = 初始化值;
B:数据类型 变量名;
变量名 = 初始化值;
12、运算符(掌握)
12.1)算术运算符
A:+,-,*,/,%,++,--
B:+的用法
a:加法
b:正号
c:字符串连接符
C:/和%的区别
数据做除法操作的时候,/取得是商,%取得是余数
D:++和--的用法
a:他们的作用是自增或者自减
b:使用
**单独使用
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
**参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
int a = 10;
int b = ++a;
放在操作数的后面:先参与操作,再自增或者自减
int a = 10;
int b = a++;
12.2)赋值运算符
A:=,+=,-=,*=,/=,%=等
B:=叫做赋值运算符,也是最基本的赋值运算符
int x = 10; 把10赋值给int类型的变量x。
C:扩展的赋值运算符的特点
隐含了自动强制转换。
面试题:
short s = 1;
s = s + 1;
short s = 1;
s += 1;
请问上面的代码哪个有问题?
12.3)比较运算符
A:==,!=,>,>=,<,<=
B:无论运算符两端简单还是复杂最终结果是boolean类型。
C:千万不要把==写成了=
12.4)逻辑运算符
A:&,|,^,!,&&,||
B:逻辑运算符用于连接boolean类型的式子
C:结论
&:有false则false
|:有true则true
^:相同则false,不同则true。
情侣关系。
!:非true则false,非false则true
&&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
12.5)位运算符(了解)
A:^的特殊用法
一个数据针对另一个数据位异或两次,该数不变
B:面试题
a:请实现两个变量的交换
**采用第三方变量
**用位异或运算符
左边a,b,a
右边a^b
b:请用最有效率的方式计算出2乘以8的结果
2<<3
12.6)三元运算符
A:格式
比较表达式?表达式1:表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
C:案例:
a:比较两个数据是否相等
b:获取两个数据中的最大值
c:获取三个数据中的最大值
//获取三个整数中的最大值。
public class JavaTest{ public static void main(String[] args){ int x = 10; inty = 5; int z = 20; System.out.println(x>y? "x大于y" : "x小于y"); int x = 10; int y = 5; int z =(x>y? x:y); System.out.println("z:" + z); //第一种方法:先比较a、b最大值,在拿a、b最大值和c比较。 int x = 10; int y = 5; int z = 20; int temp = ((x>y)? x:y); int max = ((temp>z)? temp:z); System.out.println("abc最大值是:" + max); // 第二种方法(不推荐) int max = (x>y)?((x>z)? x:z):((y>z)? y:z); System.out.println("abc最大值是:" + max); 获取两个整数是否相同 boolean flag = (x == y)? true:false; //不需要ture和false,因为是booleam类型。 boolean flag = (x == y); System.out.println(flag);