JAVA学习重点笔记

JAVA学习重点笔记
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:结束当前循环。

相关主题
相关文档
最新文档