JAVA学习重点笔记
Day01:
1.Java语言平台
*J2SE(Java2Platform Standard Edition)标准版
*是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发
*J2MEME(Java2Platform Micro Edition)小型版
*是为开发电子消费产品和嵌入式设备提供的解决方案
*J2EE(Java2Platform Enterprise Edition)企业版
*是为开发企业环境下的应用程序提供的一套解决方案,该技术体系中包含的技术如Servlet、Jsp等,主要针对于Web应用程序开发
2.Java语言跨平台原理
*只要在需要运行java应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine)即可。由JVM来负责Java程序在该系统中的运行
3.什么是JRE
*包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
*JRE:JVM+类库。
4.什么是JDK
*JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。
*JDK:JRE+开发工具包
5.Java语言的书写格式:
*大括号要对齐,并且成对写
*左大括号前面有空格
*遇到左大括号要缩进,Tab
*方法和程序块之间加空行让程序看起来清晰
*并排语句之间加空格,例如for语句
*运算符两侧加空格
6.Java语言中的关键字
*被Java语言赋予特定含义的单词,组成关键字的单词全部小写
*常见关键字有:class public static void goto const
7.Java语言中的标识符
*就是给类,变量,接口,方法等起名字时使用的字符序列
*组成规则及注意事项:
a.英文大小写字母
b.数字字符
c.$和_
*标识符注意事项
a.不能使用关键字
b.不能数字开头
*标识符的命名规则
a.包:最好是域名倒过来,要求所有的字母小写
b.方法或变量:如果是一个单词则全部小写,多个单词则从第二个单词起首字母大写
c.类或接口:如果是一个单词则首字母需要大写,多个单词则每个单词的首字母大写
d.常量:如果是一个单词,所有字母大写,多个单词则所有单词大写,用下划线区分大小写
Day02:将以代码的方式进行记录
1.常量:
class Demo1_Constant{//constant常量
public static void main(String[]args){
/*
*字符串常量用双引号括起来的内容
*整数常量所有整数
*小数常量所有小数
*字符常量用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号
*布尔常量较为特殊,只有true和false
*空常量null(数组部分讲解)
*/
System.out.println("agdgfdggghg4545454gfdbg*&^^6bc");//字符串常量
System.out.println("1230g");//整数常量
System.out.println(12.0);//小数常量
//System.out.println('10');//''中必须放的是单个字符,10代表的是1字符和0字符
//System.out.println('');//''中什么也不放,也是不可以的,因为代表不了任何字符
System.out.println('好');//带表空格字符
System.out.println(true);//boolean类只有两个值,true和false
System.out.println(null);
}
}
2.数据类型转换:
*数据类型:整数类型,浮点类型,字符类型,布尔类型
注意:整形变量默认为int类型,浮点型默认为double型
class Demo1_DataType{//DataType数据类型
public static void main(String[]args){
//整数类型
byte b=10;//占一个字节,-128到127
short s=20;//占两个字节
int i=30;//占四个字节整数默认的数据类型就是int类型
long x=8888888888L;//占八个字节如果long类型后面加L进行标识最好加大L,因为小l太像一了
System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(x);
//System.out.println(12345+54321l);
//浮点类型
float f=12.3F;//占四个字节
double d=33.4;//占八个字节小数默认的数据类型是double,double类型后面也可以用D或d标识,但是一般不加
System.out.println(f);
System.out.println(d);
//字符类型
char c='a';//占两个字节
System.out.println(c);
//布尔类型
boolean b1=true;
boolean b2=false;
System.out.println(b1);
System.out.println(b2);
}
}
3.定义变量注意事项:
*a:作用域问题
*同一个区域不能使用相同的变量名
*b:初始化值问题
*局部变量在使用之前必须赋值
*c:一条语句可以定义几个变量
*int a,b,c...;
4.强制类型转换:
class Demo3_DataTypeConversion{//Conversion转换
public static void main(String[]args){
//数据类型转换之隐式转换
/*int x=3;
byte b=4;
x=x+b;
System.out.println(x);*/
//数据类型转换之强制转换
/*int x=3;
byte b=4;
b=(byte)(x+b);
System.out.println(b);*/
//00000000000000000000000010000010130的二进制
//10000010-126补码
//00000001-1求反码
//10000001-126反码
//11111110-126原码
byte b=(byte)(126+4);
System.out.println(b);
//00000000000000000000000100101100300的二进制
//00101100
byte b2=(byte)300;
System.out.println(b2);
}
}
class Demo4_DataTypeConversion{
public static void main(String[]args){
//System.out.println('a'+1);//98,因为有ASCII码表,a字符对应的是int类型的97
//System.out.println((char)('a'+1));
System.out.println("hello"+'a'+1);//任何数据类型用+与字符串相连接都会产生新的字符串
System.out.println('a'+1+"hello");
System.out.println("5+5="+(5+5));
}
}
5.面试需注意:
class Test1_DataTypeConversion{
public static void main(String[]args){
//面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
byte b1=3;
byte b2=4;
//byte b3=b1+b2;
/*
从两方面
1,byte与byte(或short,char)进行运算的时候会提升为int,两个int类型相加的结果也是int类型
2,b1和b2是两个变量,变量存储的值是变化,在编译的时候无法判断里面具体的值,相加有可能会超出byte的取值范围
*/
//System.out.println(b3);
//byte b4=3+4;//java编译器有常量优化机制
byte b4=7;
System.out.println(b4);
}
}
6.算数运算符
class Demo1_Operator{//operator运算符
public static void main(String[]args){
/*
*a:+号在java中有三种作用,代表正号,做加法运算,字符串的连接符
*b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
*c:/获取的是除法操作的商,%获取的是除法操作的余数
*%运算符
*当左边的绝对值小于右边绝对值时,结果是左边
*当左边的绝对值等于右边或是右边的倍数时,结果是0
*当左边的绝对值大于右边绝对值时,结果是余数
*%运算符结果的符号只和左边有关系,与右边无关
*任何一个正整数%2结果不是0就是1可以用来当作切换条件
*/
//System.out.println(10/3);//整数相除结果只能是整数
//System.out.println(10/3.0);//如果想得到小数,把其中一个数变成小数,另一个数在运算的时候会自动类型提升
//System.out.println(-5%5);
System.out.println(13%-5);
}
}
class Demo2_Operator{
/*
*a:单独使用:
*放在操作数的前面和后面效果一样。(这种用法是我们比较常见的) *b:参与运算使用:
*放在操作数的前面,先自增或者自减,然后再参与运算。
*放在操作数的后面,先参与运算,再自增或者自减。
*/
public static void main(String[]args){
//单独使用
/*int a=3;
//a++;//a=a+1;
++a;//a=a+1;
System.out.println(a);*/
//参与运算使用
int a=3;
int b;
//b=a++;//当++在变量后面的时候,会先将变量中的值取出做赋值操作,然后再自身加1
b=++a;//当++在变量前面的时候,会先自身加1,然后在将结果赋值
System.out.println("a="+a);
System.out.println("b="+b);
}
}
注意:1.int i=1;i=i++;编译后i的值仍为1,这是Java特有的,与c++底层机制不一样
2.byte b=10;
//b++;//b=(byte)(b+1)
b=b+1;//当byte与int进行混合运算的时候,会提升为int类型,两个int相加的结果还是int,赋值给byte会损失精度
3.short s=1;s+=1;//s=(short)(s+1);
7.逻辑运算符
class Demo1_Operator{
public static void main(String[]args){
//&,|,^,!
//int x=10;
//5 //x>5&x<15 //逻辑与&并且and遇false则false int a=10; int b=20; int c=30; /*System.out.println(a System.out.println(ac);//true&false=false System.out.println(a>b&b System.out.println(a>b&b>c);//false&false=false*/ //逻辑或或or遇true则true /*System.out.println(a System.out.println(ac);//true|false=true System.out.println(a>b|b System.out.println(a>b|b>c);//false|flase=false*/ //逻辑异或^两边相同为false,两边不同为true /*System.out.println(a System.out.println(ac);//true|false=true System.out.println(a>b^b System.out.println(a>b^b>c);//false|flase=false*/ //逻辑非! System.out.println(!true); System.out.println(!!true); } } class Demo2_Operator{ /* &&与&的区别 *a:最终结果一样。 *b:&&具有短路效果。左边是false,右边不执行。 ||与|的区别 a:最终的结果是一样 b:||具有短路效果,左边为true,右边不执行 */ public static void main(String[]args){ /*int a=10; int b=20; int c=30; System.out.println(a System.out.println(ac);//true&&false=false System.out.println(a>b&&b System.out.println(a>b&&b>c);//false&&false=false*/ int x=3; int y=4; //System.out.println((++x==3)&(++y==4));//false&false=false //System.out.println("x="+x);//x=4 //System.out.println("y="+y);//y=5 System.out.println("---------------------------"); System.out.println((++x==3)&&(++y==4));//false&false=false System.out.println("x="+x);//x=4 System.out.println("y="+y);//y=4 } } 8.位运算符 class Demo1_Operator{ public static void main(String[]args){ *&,|,^,~的用法 *&:有0则0 *|:有1则1 *^:相同则0,不同则1 *~:按位取反 */ System.out.println(6&3);//2 System.out.println(6|3);//7 System.out.println(6^3);//5 System.out.println(~6);//-7? } } /* 110 &011 ----------- 010 110 |011 ----------- 111 110 ^011 ----------- 101 000000000000000000000000000001106的原码反码补码都是本身11111111111111111111111111111001对6取反 -00000000000000000000000000000001 --------------------------------------- 11111111111111111111111111111000反码 10000000000000000000000000000111原码(-7) */ class Demo2_Operator{ public static void main(String[]args){ /* *位异或运算符的特点 *^的特点:一个数据对另一个数据位异或两次,该数本身不变。 //System.out.println(5^10^10); //System.out.println(5^10^5); /* *请自己实现两个整数变量的交换(不需要定义第三方变量) *注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。 */ int x=10; int y=5; //需要第三方变量,开发推荐用这种 /*int temp; temp=x; x=y; y=temp;*/ //不需要定义第三方变量,有弊端,有可能会超出int的取值范围 /*x=x+y;//10+5=15 y=x-y;//15-5=10 x=x-y;//15-10=5*/ //不需要第三方变量,通过^来做 x=x^y;//10^5 y=x^y;//10^5^5y=10 x=x^y;//10^5^10x=5 System.out.println("x="+x+",y="+y); } } class Demo2_Operator{ public static void main(String[]args){ /* *位异或运算符的特点 *^的特点:一个数据对另一个数据位异或两次,该数本身不变。 */ //System.out.println(5^10^10); //System.out.println(5^10^5); /* *请自己实现两个整数变量的交换(不需要定义第三方变量) *注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。 */ int x=10; int y=5; //需要第三方变量,开发推荐用这种 /*int temp; temp=x; x=y; y=temp;*/ //不需要定义第三方变量,有弊端,有可能会超出int的取值范围 /*x=x+y;//10+5=15 y=x-y;//15-5=10 x=x-y;//15-10=5*/ //不需要第三方变量,通过^来做 x=x^y;//10^5 y=x^y;//10^5^5y=10 x=x^y;//10^5^10x=5 System.out.println("x="+x+",y="+y); } } class Demo3_Operator{ public static void main(String[]args){ /* *<<:左移左边最高位丢弃,右边补齐0 *>>:右移最高位是0,左边补齐0;最高为是1,左边补齐1 *>>>:无符号右移无论最高位是0还是1,左边补齐0 *最有效率的算出2*8的结果 */ //左移,向左移动几位就是乘以2的几次幂 //System.out.println(12<<1);//24 //System.out.println(12<<2);//48 /* 0000000000000000000000000000110012的补码 (0)0000000000000000000000000001100024的补码 (00)0000000000000000000000000011000048的补码 */ //右移,向右移动几位就是除以2的几次幂 //System.out.println(12>>1); //System.out.println(12>>2); /* 0000000000000000000000000000110012的补码 00000000000000000000000000000110(0)6 00000000000000000000000000000011(00)3 */ //最有效率的算出2*8的结果 System.out.println(2<<3); } } 9.三元运算符 class Test1_Operator{ public static void main(String[]args){ /* *A:案例演示 *比较两个整数是否相同 *B:案例演示 *获取三个整数中的最大值 */ //比较两个整数是否相同 /*int x=10; int y=10; //boolean b=(x==y)?true:false; boolean b=(x==y); System.out.println("b="+b);*/ //获取三个整数中的最大值 int a=10; int b=20; int c=30; //先比较任意两个数的值,找出这两个数中的最大值 int temp=(a>b)?a:b; //用前两个数的最大值与第三个数比较,获取最大值 int max=(temp>c)?temp:c; System.out.println("max="+max); } } Day03 1.选择结构 *if的三种结果 a.class Demo1_If{ public static void main(String[]args){ int age=17; if(age>=18){ System.out.println("可以浏览本网站"); } System.out.println("完了"); } } b./* *A:if语句的格式2 * if(比较表达式){ 语句体1; }else{ 语句体2; } *B:执行流程: *首先计算比较表达式的值,看其返回值是true还是false。 *如果是true,就执行语句体1; *如果是false,就执行语句体2; *C:案例演示 *a:获取两个数据中较大的值 *b:判断一个数据是奇数还是偶数,并输出是奇数还是偶数 *注意事项:else后面是没有比较表达式的,只有if后面有。*/ class Demo3_If{ public static void main(String[]args){ /*int x=0; if(x==1){ System.out.println("男厕所欢迎您"); }else{ System.out.println("女厕所欢迎您"); }*/ //a:获取两个数据中较大的值 /*int x=10; int y=20; int z; if(x>y){ z=x; }else{ z=y; } System.out.println(z);*/ //b:判断一个数据是奇数还是偶数,并输出是奇数还是偶数 int num=11; if(num%2==0){ System.out.println(num+"是一个偶数"); }else{ System.out.println(num+"是一个奇数"); } } } * *A:案例演示 *if语句和三元运算符完成同一个效果 *B:案例演示 *if语句和三元运算符的区别 *三元运算符实现的,都可以采用if语句实现。反之不成立。 *什么时候if语句实现不能用三元改进呢? *当if语句控制的操作是一个输出语句的时候就不能。 *为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。 */ class Demo4_If{ public static void main(String[]args){ int x=10; int y=20; int z; if(x>y){ //z=x; System.out.println(x+"是最大值"); }else{ //z=y; System.out.println(y+"是最大值"); } //System.out.println(z); int a=20; int b=30; int c=(a>b)?a:b; } } c./* *A:案例演示 *需求:获取三个数据中的最大值 *if语句的嵌套使用。 */ class Demo6_IfIf{ public static void main(String[]args){ int a=40; int b=50; int c=30; if(a>b){//a>b if(a>c)//a>b并且a>c { System.out.println("a是最大值:"+a); }else{//a>b并且a<=c System.out.println("c是最大值:"+c); } }else{//a<=b if(b>c)//a<=b并且b>c { System.out.println("b是最大值:"+b); }else{//a<=b并且b<=c System.out.println("c是最大值:"+c); } } } } /* *A:if语句的格式3: * if(比较表达式1){ 语句体1; }else if(比较表达式2){ 语句体2; }else if(比较表达式3){ 语句体3; } ... else{ 语句体n+1; } *B:执行流程: *首先计算比较表达式1看其返回值是true还是false, *如果是true,就执行语句体1,if语句结束。 *如果是false,接着计算比较表达式2看其返回值是true还是false, *如果是true,就执行语句体2,if语句结束。 *如果是false,接着计算比较表达式3看其返回值是true还是false, *如果都是false,就执行语句体n+1。 *C:注意事项:最后一个else可以省略,但是建议不要省略,可以对范围外的错误值提示*/ class Demo5_If{ public static void main(String[]args){ int x=2; if(x==1){ System.out.println("男厕所欢迎您"); }else if(x==0){ System.out.println("女厕所欢迎您"); }else{ System.out.println("无法识别您的性别"); } } } 2.循环结构 /* 需求:把一句话打印5次:我爱Java 后来改了,我要50000次,肿么办? 想了想,它是一个重复的动作? 接着在想一个游戏:植物大战僵尸2。 针对这种重复的动作问题,Java就提供了一种语句:循环语句。 循环语句: 循环体:要做的事情。 初始化条件:从哪里开始 判断条件:在什么情况下结束 控制条件:控制台初始化条件的变化 Java提供了三种循环: for while do...while for格式: for(初始化条件;判断条件;控制条件) { 循环体; } 执行流程: A:先执行初始化表达式。 B:执行判断条件。 C:根据判断条件的返回值 如果true,执行循环体。 如果false,for循环结束。 D:执行控制条件,接着返回B。 */ class ForDemo { public static void main(String[]args) { System.out.println("我爱Java"); System.out.println("我爱Java"); System.out.println("我爱Java"); System.out.println("我爱Java"); System.out.println("我爱Java"); System.out.println("********"); //用循环改进 /* 初始化条件一般定义一个变量。 判断条件一般是一个关系表达式。 循环体就是要做什么。 控制条件就是控制变量的变化。 */ for(int x=0;x<50;x++) { System.out.println("我爱Java"); } System.out.println("********"); //把初始化条件改为x=1 for(int x=1;x<=50;x++) { System.out.println("我爱Java"); } //作业:请把1这个数字输出10次。 //改进:请把从1-10这个数据输出。 //1 //2 //3 //... } } /* 需求: 九九乘法表: 1*1=1 1*2=22*2=4 1*3=32*3=63*3=9 1*4=42*4=83*4=124*4=16 ... 1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81 转义字符: \n换行 \r回车 \t tab键位置 */ class ForForTest { public static void main(String[]args) { for(int x=1;x<=9;x++) { for(int y=1;y<=x;y++) { System.out.print(y+"*"+x+"="+y*x+"\t"); } System.out.println(); } } } while循环格式: 基本格式: while(判断条件) { 循环体; } 而我说循环有四个内容: 循环语句: 循环体:要做的事情。 初始化条件:从哪里开始 判断条件:在什么情况下结束 控制条件:控制台初始化条件的变化 改进版格式: 初始化条件; while(判断条件) { 循环体; 控制条件; } 看for的结果: for(初始化条件;判断条件;控制条件) { 循环体; } while循环和for是可以等价转换的。 区别: 初始化条件的变量在for结束,以后是不能使用的。 而while结束后是可以使用的。 如果这个变量仅仅是控制次数的,建议使用for循环。 因为这样,for结束,这个变量就结束,效率高。 什么时候用for,什么时候用while? 如果是控制范围,最好用for。 如果范围不明确,用while。比如说:我吃小蜜橘,你们吃葡萄。*/ class WhileDemo { public static void main(String[]args) { //需求:把一句话打印5次:我爱Java for(int x=0;x<5;x++) { System.out.println("我爱Java"); } //System.out.println(x); System.out.println("************"); //用while改进 int y=0; while(y<5) { System.out.println("我爱Java"); y++; } System.out.println(y); } } /* do...while循环的格式: 基本格式: do { 循环体; }while(判断条件); 循环语句: 循环体:要做的事情。 初始化条件:从哪里开始 判断条件:在什么情况下结束 控制条件:控制台初始化条件的变化 改进版: 初始化条件; do{ 循环体; 控制条件; }while(判断条件); 注意: do...while循环和其他两种循环的区别是: do...while至少执行一次。 其他的两种循环可能一次都不执行。 */ class DoWhileDemo { public static void main(String[]args) { //需求:把一句话打印5次:我爱Java int x=0; do { System.out.println("我爱Java"); x++; }while(x<5); } } 现在的循环都是从头干到尾,假如我想在输出一个数据后就里面结束,怎么办? break和continue:终止或者中断循环的操作。 注意: break和continue是在循环中使用的。一般是在循环中的判断中使用的。 break还可以用作switch语句的结束。 break和continue在一个完整的操作中,一般位于最后。 break:结束当前循环。