一、介绍
1、java是oracle(甲骨文)公司的。
2、JAVA语言有3类应用
1)JAVAME
用于嵌入式开发。
比如:电视机顶盒、打印机、PDA又称掌上电脑(手机、平板电脑、游戏机、扫码枪)。
2)JAVASE
JAVA基础,用于桌面应用程序开发,软件以windows窗口模式打开,如QQ、音乐播放器。
3)JAVAEE
后端开发。开发网页、app。
3.垃圾回收
垃圾回收在java程序运行过程中自动启用,程序员无法精准控制和干预。
二、环境
1、jvm、jre、jdk
1)jvm
java虚拟机,安装jvm可实现跨平台。
java中所有的基本类型都有固定的存储范围和所占内存空间的大小,而不是受具体操作系统的影响,以保证java程序的可移植性。这是因为jvm,即java虚拟机做了调整。
2)jre
包含Java虚拟机和核心类库。有了jre,java程序就可以正常运行起来。
3)jdk
软件开发工具包,包含了程序运行时所需的工具和jre。
总之,安装jdk即可。
2、运行程序
一个程序在运行对的时候有两个基本的指令就是java.exe和javac.exc
//一个类名为TestJava01的类public class TestJava01{//执行类的入口函数public static void main(String[] arg){//打印语句System.out.print("这是我的第一个java文件");}}
1)javac.exe
功能是编译,具体解释:将一个.java类型的文件经过转化(编译),得到一个.class文件的过程。
一个类对应一个.class文件。我们将.class文件称为字节码文件。
javac.exe xx.java #会得到xx.class
2)java.exe
运行.class文件
java 类名
虽然我们这里出现了乱码,解决乱码:在编译的时候设置编码方式
3、配置环境变量
目的:将一些文件的路径系统化,可直接调用文件名执行文件。
三、编码
1)Unicode(UTF-16 LE)
全球统一编码,包含所有的语言。每个字符占2个字节,因而可以用16进制编码表示。
JAVA默认用Unicode,但是char类型是和ASCII编码等价的。
public static void main(String[] args) {char a='\u0061';char b=97;System.out.println(a); //aSystem.out.println(b); //a}
2)UTF-8
如果文档以英文为主时,Unicode编码比ASCII编码需要多一倍的存储空间,UTF-8编码由此而生。
全球统一编码,包含所有的语言。特点:英文字母占1个字节,汉字占2个字节。
3)ASCII
ASCII也称为美国编码。占用1个字节。
ASCII对照码
4)ISO8859-1
欧洲编码。
四、基本类型
变量其实是内存中的一块区域,使用变量名来访问这块区域。每一个变量使用前必须先声明(申请内存),然后必须进行赋值(填充内容),才能使用。
1、总结
2、自动转换顺序
1)byte、short、char、int、long、float、double
位 122 4848
byte a=1;//a=a+1; //报错,因为等式右边a+1为int型,把int型赋值给byte型要强制类型转换。//应改写为a=(byte)(a+1);System.out.println(a); //4
2)short和char不会相互转换
因为char是无符号的,范围是[0,65535]。而short的范围是[-32768,32767]他们互不包含。
3)byte short char三者在计算时会被转化成int类型
3、char
1)char存什么
可以存一个(字母、数字、字符),一个汉字,一个转义字符,一个ascii编码,一个Unicode编码。
2)编码方式
java字符采用Unicode编码,每个字符占两个字节(16位)
3)使用
char zi_mu='a';char han_zi='哈';char zhi=97;char uni='\u0061';char zhuan_yi='\n';
4)转义字符
\r 回车\n 换行\t 横向跳格,也叫制表符(excel字段间分隔符)\' 单引号\" 双引号\\ 反斜杠回车等于先按下回车(\r ascii码为10),再按换行(\n ascii码为13)
4、boolean
用于逻辑运算,一般用于程序流程控制。
java的boolean只允许取值true或false。不允许用0或非0表示。
boolean tmp1=true;boolean tmp2=false;boolean tmp3=0; //报错
5、int
1)最大值和最小值怎么算
int=4byte=32bit。
第一位为符号位,整数为0,负数为1。
2进制转10进制怎么算。
【1】其最大值为2的31次方-1
int型的32bit位中,第一位是符号为,正数位0。因此,int型能表示的最大的正数的二进制码是
0111 0111 1111 1111 1111 1111 1111 1111.也就是2^31-1。但是这样不好算,我们将其+1变成
1000 0000 0000 0000 0000 0000 0000 0000=2^31再-1 =2^31-1(加1减1值不变)
【2】最小值值为-2的31次方
最小的负数的二进制码是1000 0000 0000 0000 0000 0000 0000 0000
6、float、long
float定义时加f,long定义时加l
五、String
1、地址问题
String s1="hello"; //开辟一块空间放"hello"String s2="hello"; //直接将s2的指针指向"hello"的空间String s3=new String("hello"); //新开辟一块空间放"hello"System.out.println(s1==s2); //true 地址相同System.out.println(s2==s3); //true 地址不同
六、运算符
1、/与%
1)/
【1】在整数做被除数时,0不能做除数,否则报错。
System.out.println(3/0);Exception in thread "main" java.lang.ArithmeticException: / by zeroat test.Test.main(Test.java:6)
【2】小数做被除数,整数0结果为Infinity(无限大),因为0是无穷小,尽被除数也很小但相当于除数很大很大。
System.out.println(1.0/0);//Infinity
2)%
【1】为两个整数取余,结果与被取余数符号相同。小数没有意义(但不会报错)
System.out.println(3%5); //3System.out.println(-3%5); //-3System.out.println(3%(-5)); //3
【2】整数对0取模报错
System.out.println(3%0);Exception in thread "main" java.lang.ArithmeticException: / by zeroat test.Test.main(Test.java:6)
【3】小数对0取模,结果为NaN。
NaN=not a number(没有这个数)。因为该结果无穷大,无穷大无法明确显示,所提也就无法明确写出余数,所以显示NaN。
System.out.println(1.0%0);//NaN
2、异或(^)
不同为异(true),同为flase
System.out.println(true^false); //trueSystem.out.println(false^true); //trueSystem.out.println(true^true); //falseSystem.out.println(false^false); //false
3、取反
System.out.println(!true); //falseSystem.out.println(!false); //true
七、标准输入
1、Scanner
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc=new Scanner(System.in);String str=sc.next();//读取键盘录入的字符串System.out.println(str);}}
2、next()
1)从什么开始读
从非空格的任意字符开始读,next()遇到空格、Tab、会停止向字符串中输入内容(但是仍然可以在控制台继续进行输入,只不过不再把字符输入到字符串中)。回车结束控制台输入。
所以next()不能读入空格、Tab,因为会结束。
运行1)中的代码,在控制台分别输入:
空格
Tab
从非空格和Tab开始输入
\t不影响
2)回车问题
不读入从控制台输入的回车
3.nextLine
1)从什么开始读
从包括空格的任意字符开始读,只有遇到回车时才结束。所以nextline()可以读空格和从控制台输入的回车。
2)回车问题
当nextLine放在next后面时,因为next不读入从控制台输入的回车,导入nextLine读入从控制台输入的回车,导致nextLine什么也没读就结束输入了。
3.nextLine、next的区别
1)从什么时候开始读
next()从非空格、Tab的任意字符开始读。
nextLine从包括空格的任意字符开始读。
2)停止
next()遇到空格、Tab即停止向字符串输入内容,但扔可以向控制台输入;回车结束从控制台输入。
nextLine()只有遇到回车时才结束。
3)回车
【1】next、nextInt、nextDouble等方法不读入从控制台输入的回车。
【2】nextLine读入从控制机台输入的回车。
【3】出现的问题:
这会导致当nextLine放在next后面时,因为next不读入从控制台输入的回车,所以nextLine读入从控制台输入的回车,使得nextLine什么也没读就结束输入了。
解决方法:在next、nextInt、nextDouble等方法之后加一个nextLine()读入这个回车,之后再加一个nextLine输入正常内容。
Scanner sc=new Scanner(System.in);String next=sc.next();String tmp=sc.nextLine();String line=sc.nextLine();System.out.println(next);System.out.println(tmp);System.out.println(line);
八、 if条件语句
1、if-else
1)书写格式
if(条件表达式){语句体1}else{语句体2}
2)执行流程
【1】计算比较表达式的值,看其返回的是true还是false
【2】如果是true,就执行语句体1
【3】如果是false,就执行语句体2
2、if-else if-else
1)书写格式
if(条件表达式1){语句体1}else if(条件表达式2){语句体2}else if(条件表达式3){语句体3}...else{语句体n+1}
2)执行流程
【1】首先计算条件表达式,看其返回 的是true还是false
【2】如果是true,就执行语句体1,if表达式结束
【3】如果是false,接着计算条件表达式2,看其是true还是false
【4】如果是true就执行语句体2,if表达式结束
【5】如果是false就计算比较表达式3看其是true还是false
【6】如果是false就执行语句体n+1...
【7】如果全是false就执行else
3、条件表达式
int i=3;int j=4;System.out.println(i==j); //falseSystem.out.println(i=j); //4
九、三元运算符
(条件表达式)?表达式1:表达式2;
int num1=9;int num2=10;int max=num1>num2?num1:num2;System.out.println(max);//10
执行:先判断条件表达式的值,如果是true则执行表达式1,如果是false则执行表达式2
十、循环语句
1、while
1)while
//1-5累加int num=1;int res=0;while (num<=5){res+=num;num++;}
2)do-while
先计算后判断
//1-5累加int num=1;int res=0;do{res+=num;num++;}while(num<=5);System.out.println(res);
2、for
1)格式
int res=0;for(int i=1;i<=5;i++){res+=i;}System.out.println(res); //15
2)双层for循环
//打印2次数字for(int i=1;i<=3;i++){for(int j=1;j<=2;j++){System.out.print(i+" ");}System.out.println();}1 12 23 3
3、嵌套循环
是值在一个循环语句的循环体重再定义一个循环语句的语法结构,while、do-while、for循环语句都可以进行嵌套,而且他们之间也可以相互嵌套。
总的循环次数=内循环次数*外循环次数
外循环控制的是行数,内循环控制的是列数
4、死循环
while(true){}
for(;;){System.out.println("hi");}
十一、swich语句
1、格式
switch(表达式){case 常量1: 语句breakcase 常量2:语句breakcase 常量3:语句breakdefault:语句break}
常量1、2、3都只能是常量
2、执行流程
计算表达式的值,从第一个匹配的case开始一直往下运行,知道找到break位置。
如果图中遇到default也会正常运行其中的语句。
当表达式不与任何case后面的常量匹配时,会从default语句开始一直向下运行,直到遇到break为止,途中遇到case语句也会正常运行其中的语句。
3、default语句的顺序可以改变,但要注意改变顺序对程序的影响。
4、一个需要注意的问题
char tmp='a';switch (tmp){case 97:System.out.println(tmp);default:System.out.println("hi");}a hi
char tmp='a';switch (tmp){case 97:System.out.println(tmp); //同时报错,重复case 'a':System.out.println(tmp); //同时报错,重复default:System.out.println("hi");}
[Java]介绍|环境|编码|数据类型|String|运算符|标准输入|if语句|循环语句|三元运算符|循环语句|swich语句