Java学习笔记
1、java基础
1.1 java关键字和标识符
关键字:
一般是编译器(eclipse或者idea)高亮显示的都是java当中的关键字,这些关键字是程序员开发者不能修改的东西,比如public class static package等等,是sun公司规定好的。
标识符:
是程序员开发者能自己命名的单词,比如类名、方法名、变量名这些都是标识符
其中 Hello、main就是标识符
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
标识符在使用的时候要遵守规则和规范:
a、规则:字母、数字、下划线、美元符号($),不能以数字开头,不能使用关键字
规则就是法律、语法,必须遵守,不遵守java语言就不通过,编译不通过
b、规范:可以不遵守,但我建议大家跟规则一样都要遵守,不遵守java也不会报错,跟道德一样
1.1 见名知意
1.2 驼峰式命名,有高有低,高低指的是英文的大小写
类名:首先不能用中文,用英文每个单词首字母大写,比如UserLogin
方法名:首字母小写,其余大写,比如eatFoods
变量名:
常量:每个单词全大写,单词之间下划线分开,COMPUTER_COLOR就是常量
public static final String COMPUTER_COLOR = "红色";
普通变量:首字母小写,其余大写,比如 computorBrand
1.2 字面值
字面值:java当中的数据,java语言组成部分,跟关键字、标识符一样
10、100、-200 整数
1.2 -1.2 浮点数
true、false 布尔值
'A' 'b' '我' 字符
“LiMing” 字符串
1.3 基本数据类型
计算机的一些常识
byte kb mb gb tb
1kb = 1024b
1mb = 1024kb
1gb = 1024mb
1tb = 1024gb
现在的计算机都是交流电的形式运行的,他只识别所谓的0、1电信号
java当中的8种数据类型:
整数型:
byte
short
int
long
浮点型(一般用来表示小数的):
float
double
字符型
char
布尔型
booblean
进制:
2进制 0001
10进制 1 2 3 11 12 13
8进制 012
16进制 0xF
数据类型 占用字节数(1字节=8bit 也就是8位)
--------------------------------------------
byte 1
short 2
int 4
long 8
float 4
double 8
boolean 1
char 2
注意:
1、在java当中定义的整数字面值默认是int类型
在我们平常使用的时候,不要太过纠结它的大小,一般用默认的int类型定义整数就可以了。
2、类型转换问题:
用小范围的数接收大范围的数的时候,需要进行强制类型转换,但是转换之后的数据会不准确,也就是精度丢失。
强制类型转换的时候慎重加慎重。
只要涉及到类型转换就要慎重!!!!!
3、在java当中定义浮点字面值的时候默认是double类型
4、默认值:一切向0看齐
整数:默认值就是0
浮点数:默认0.0
布尔值:默认false
1.4 字符
编码:计算机协会规定了一套标准,用来作为计算机和文字之间的一套字典参照表,文字和数字之间的转换表,
因为计算只认0、1,单纯的文字计算机解释不了。
解码:计算机按照规定格式的字典参照(编码格式),将存储到计算机内存当中的编码后的二进制文字再解释出来。
编码-解码要按照同一套标准,如果两边标准不一致,就会出现乱码的问题。
常见的编码格式:Ascll、GBK、Unicode(Utf-8)
以后开发当中经常用到的编码UTF-8
如何定义一个字符:
语法: char 变量名 = 字面值;
字面值是用''括起来的字符,字符只能是单个字符,当然转义字符是一种特殊的字符,不要混淆了,其实也是单 个字符。
如: char char1 = 'A';
char cahr2 = '我';
char char3 = '\u0001';
转义字符:有一些特殊的字符无法用我们认识的文字表示出来,就规定了可以将常见的字符进行转义,表示出来
比如
\n, 不加\ 就是一个普通的n字符,加了就是回车或换行
\t, 不加\ 就是一个普通的t字符,加了就是tab键
\\ \b \r
1.5 算数运算符
加(+)、减(-)、乘(*)、除(取商/ 取余%)、自增(++)、自减(–)
注意:核心点自增和自减
自增: ++前后都可以放变量
变量在前:先用后本身的值加1
变量在后:先本身的值加1再用
自减: --前后都可以放变量
变量在前:先用后变量本身的值减1
变量在后:先本身的值减1再用
public class Test03 {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);
//++ --
//a++ 先用后加
//++a 先加后用
System.out.println("===========");
int c = 1;
System.out.println(c++);//1
System.out.println(++c);//3
System.out.println(c++);//3
System.out.println(++c);//5
System.out.println("############");
int d = 1;
int f = d++;
//在程序跑完第23行的时候,它做了哪些事情
//做了两件事
//第一件事情:先把d的值给f
//第二件事情:d自增,就是d本身加1,这时候d=d+1变成了2
//注意前后两件事是按顺序的
//f=1;
//d=2;
System.out.println(d);
System.out.println(f);
f = ++d;
//在程序跑完第35行的时候,它做了哪些事情
//做了两件事
//第一件事情:d自增,就是d本身加1,这时候d=d+1变成了3
//第二件事情:把自增后的d的值给到了f
//注意前后两件事是按顺序的
//d=3
//f=3
System.out.println(d);
System.out.println(f);
}
}
1.6 赋值运算
= (赋值)
+=(加等于)
-= (减等于)
*=(乘等于)
/= (除等于)
%=(模等于)
注意:
1、做这些运算的时候,可能会出现精度丢失,也就是数据丢失的问题,需谨慎,而且编译器是不会报错的
能解决的方法就是多自测
2、会存在类型转换的问题,不要想当然的认为a+=b就是a=a+b,具体以下为例
public class Test04 {
public static void main(String[] args) {
int a = 10;
int b = 2;
a += b;
System.out.println(a);//12
System.out.println(b);
a -= b;
System.out.println(a);//10
a *= b;
System.out.println(a);//20
a /= b;
System.out.println(a);//10
a %= b;
System.out.println(a);//0
System.out.println("============");
byte c = 126;
//byte f = 128;
int d = 2;
c += d;//c = 126+ 2
//byte c = 128;
//做这些运算的时候可能会出现精度丢失的问题
//编译器是检查不出来的,所以以后编程需谨慎,多自测
System.out.println(c);
long f = 100;
int g = 200;
f += g;
System.out.println(f);
double h = 10.1;
//g += h 并不等价于 g=g+h
//无论是+=还是-=等等赋值运算符会存在自动类型转换的问题
//其实下边这两个是等价的
g += h;
g = g + (int)h;
}
}
1.7 关系运算符
表达式:变量和符号组成的一条式子,它的结果是一个值;
< <= >= ==
表达式和表达式之间可以串联使用
public class Test05 {
public static void main(String[] args) {
System.out.println(4 == 3);
System.out.println(4 != 3);
System.out.println(4 > 3);
System.out.println(4 < 3);
System.out.println(4 >= 3);
System.out.println(4 <= 3);
boolean a = (4 > 3);
boolean b = (5 < 2);
System.out.println(a == b);
System.out.println((4 > 3) == (5 < 2));
}
}
1.8 逻辑运算符
什么是短路:
在程序当中正常的执行顺序被某个运算符给中断了,一条语句后边程序就不执行(不是不需要)了,
类似于生活中的短路现象。
常用的逻辑运算符:
!非
&&短路与
|| 短路或
具体后两种逻辑运算符达短路现象以下程序为例
public class Test01 {
public static void main(String[] args) {
System.out.println(!(4 > 3));
int a = 1;
//&&短路与
//true && true 为true
//true && flase 为false
//false && true 为false
//false && false 为false
System.out.println((4>3) && (5<2));//false
System.out.println((4<2) && (5>a++));
System.out.println(a);
//||短路或
//true || true 为true
//true || flase 为true
//false || true 为true
//false || false 为false
System.out.println((1>3) || (4<5));
int b = 2;
System.out.println((5>3) || (6<b++));
System.out.println(b);
}
}
1.9 三元运算符
语法:
条件表达式 ? 表达式1 : 表达式2;
注意:
1、三元运算结果是一个值,不能作为一条独立的语句;
2、后边两个表达式的数据类型要统一,不然编译期出错,当然发生自动类型转换的时候没问题的。
public class Test02 {
public static void main(String[] args) {
int a = 30;
int b = 30;
a = (b == 20 ? 2000 : 3000);
System.out.println(a);
//a = (b == 20 ? 2000 : 11.2);
//编译器a的类型模糊,不确定是整型还是浮点型,报错
}
}
2.0 运算符的优先级
没有必要去刻意记忆运算符的优先级,最简单的方式就是表达式之间加();
2.1 程序流程控制
2.1.1 选择结构if
三种用法
1、if(布尔表达式){
语句体;
}
2、if(布尔表达式1){
语句体1;
}else{
语句体2;
}
3、if(布尔表达式1){
语句体1;
}else if(布尔表达式2){
语句体2;
}else if(布尔表达式3){
语句体3;
}…esle{
语句体…;
}
注意:
1、if else else if可以相互结合或者嵌套使用
2、在第三种方式里面else if是除了if或者elseif的其他情况,有些条件不要写重了
3、花括号括起来的是代码块,}不需要以分号结尾,他是一个整体结构,
只有一条条语句才需要分号结尾
public class Test03 {
public static void main(String[] args) {
int x = 0;
//if的第一种用法
if(x != 1) {
System.out.println(x);
}
int score = 60;
if(score > 90) {
System.out.println("优秀");
}
if(score < 90 && score > 70) {
System.out.println("良好");
}
if(score < 70) {
System.out.println("不及格");
}
//if的第二种用法
int age = 20;
if(age > 18) {
System.out.println("成年人");
}else {
System.out.println("未成年");
}
if(score > 70) {
if(score < 90) {
System.out.println("良好");
}else {
System.out.println("优秀");
}
}else {
System.out.println("不及格");
}
//if 的第三种用法
if(score > 90) {
System.out.println("优秀");
}else if(score > 70) {
System.out.println("良好");
}else {
System.out.println("不及格");
}
System.out.println("==========");
int score1 = 96;
if(score1 > 90) {
System.out.println("优秀");
}else if (score1 > 95) {
System.out.println("非常优秀");
}
}
}
2.1.2 switch语句
switch开关的意思
语法:
switch(表达式){
case 常量值:
语句体;
break;//可加可不加,但是要慎重
case 常量值:
语句体;
break;
…
default:
语句体;
break;
}
注意:switch开关在用的时候,只需要知道什么时候打开什么时候结束;
当switch表达式与case常量值匹配的时候开关打开,依次执行语句,去寻找break,直到遇到break
switch结束,找不到的话,直到switch结尾;
break:一般