一、细化Hello程序
1.详解代码
//公有的类叫做Hello
publicclassHello{
//主方法:运行程序,系统执行主方法中的执行语句
publicstaticvoidmain(Stringargs[]){
//打印语句("内容");
System.out.println("HelloWorld...1");
System.out.println("HelloWorld...2");
System.out.println("HelloWorld...3");
}
}
/*
public - 公有的 class - 类 Hello - 类名
static - 静态的 void - 无返回值的 main - 主方法
String - 字符串 String[] - 字符串数组 args - 字符串数组名
*/
2.代码细节
public修饰的类名必须和文件名一致
Java是一门大小写敏感的语言
括号都是成双成对的
方法里的代码都是从上往下执行-顺序执行
方法中的代码又叫做执行语句,执行语句用分号结束
所有的符号都是英文符号
二、Java编码规范
1.书写格式
经验:使用tab键 -- 缩进
好处:提高代码的可读性
类 - 方法 - 执行语句的等级:
类 > 方法 > 执行语句
2.代码的注释
含义:给代码额外的信息
好处:解释代码,方便程序员回顾
编译:.java --> .class
反编译:.class --> .java
XJad.exe -- 反编译软件
注意:注释不会随着编译而编译到.class文件中
三、path的作用
%JAVA_HOME%/bin --> javac.exe 和 java.exe
在path中配置了某个文件夹,代表在其他任何文件夹里都可以打开配置的文件夹中的文件
四、Java的跨平台特性
见week01>MyDay02>画图> Java跨平台特性.png
五、Java的体系划分
JavaSE -- J2SE -- 核心版本
JavaEE -- J2EE -- 企业版本(做服务端)
JaveME -- J2ME -- 微型版本(做客户端 -- 过时了)
六、Java的发展历史
雇主:sun(Stanford University Network)---2009年74亿美金卖给oracle公司
Java之父:詹姆斯·高斯林 (James Gosling)
版本变更
1995年5月23日,Java语言诞生;
1996年1月,第一个JDK-JDK1.0诞生;
1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术;
1996年9月,约8.3万个网页应用了JAVA技术来制作;
1997年2月18日,JDK1.1发布;
1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录;
1997年9月,JavaDeveloperConnection社区成员超过十万;
1998年2月,JDK1.1被下载超过2,000,000次;
1998年12月8日,JAVA2企业平台J2EE发布;
1999年6月,SUN公司发布Java的三个版本:标准版、企业版和微型版;
2000年5月8日,JDK1.3发布;
2000年5月29日,JDK1.4发布;
2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机;
2001年9月24日,J2EE1.3发布;
2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升;
2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本 的重要性,J2SE1.5更名为Java SE 5.0;
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取 消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME;
2006年12月,SUN公司发布JRE6.0;
2009年4月7日Google App Engine开始支持Java;
2009年04月20日,甲骨文74亿美元收购Sun。取得Java的版权;
2010年11月,由于甲骨文对于Java社区的不友善,因此Apache扬言将退出JCP;
2011年7月28日,甲骨文发布Java 7.0的正式版;
2014年3月19日,甲骨文公司发布Java 8.0的正式版
七、什么是IDE
IDE:又称开发环境,编写代码的软件
使用:记事本 -> notepad++ -> eclipse -> IDEA
八、编码问题
出现原因:编码和解码不一致
解决方案:两个端口设置一样的编码格式
具体方案1:javac -encoding UTF-8 Hello.java
理解:使用UTF-8的编码格式去编译Hello.java
经验:太麻烦 -- 不推荐
具体方案2:在notepad++中设置编码格式 -- 一劳永逸
设置 -- 首选项 -- 新建 -- ASCI
注意:要想不乱码,必须将之前的文件删除掉,再新建
九、关键字
含义:Java提前给我们定义好的具有特殊意义的单词
比如:public(公有的)、static(静态的)、class(类)、void(无返回值的)
注意:不用记,后续课程会逐一讲解每个关键字的作用
十、标识符
含义:给类、接口、方法、变量取名字时使用到的字符序列
publicclass标识符{
publicstaticvoid标识符(String[] 标识符){
}
}
组成部分:大小字母、数字、$、_、中文
注意事项:
区分大小写
不能以数字开头
不能使用除了$和_以外的特殊符号
不能使用Java的关键字
考虑到编码问题,不要使用中文
十一、变量
含义:在程序执行的过程中发生改变的量,变量其实就是一个存储单个数据的容器
声明变量的语法规则:
数据类型 变量名 [= 值];
注意:=为赋值号,将右边的数值赋值给左边的变量
十二、变量的使用注意事项
在同一个作用域中,变量名不能重复声明
变量必须初始化后才能使用
十三、基本数据类型
见 基本数据类型图.png
注意事项:
1.float类型变量的值必须加上f或F
2.数字字面量:程序中出现的数字
整数数字:默认int类型
小数数字:默认double类型
3.char类型的值必须使用单引号括起来
4.char类型的值只能有一个字符
5.boolean类型的值只能是true或false
true - 对的、真的
false- 错的、假的
6.一个字节等于8bit(位)
7.二进制中的最高位为符号位,0-正数,1-负数
8.数值型的取值范围:byte<short<int<long<float<double
9.byte类型的取值范围:-128~127
10.int类型的取值范围:-21亿...~21亿...
11.char类的取值范围:0~65535
12.boolean为什么是4个字节?
《Java虚拟机规范》中明确表示在虚拟机底层没有明确的命
令去表示boolean值,使用int的1和0表示true或false
十四、基本数据类型的转型
数值类型取值范围:byte<short<int<long<float<double
1.自动转型
含义:取值范围小 转 取值范围大
2.强制转型/强转
含义:取值范围大 转 取值范围小
语法结构:类型 变量名 = (强转的目标类型)要强转的变量;
3.特殊点
一、算数运算符
+-*/的基本使用
publicclassDemo01{
publicstaticvoidmain(String[] args){
intnum1=100;
intnum2=50;
intresult=num1+num2;
System.out.println(result);//150
System.out.println(num1-num2);//50
System.out.println(num1*num2);//5000
System.out.println(num1/num2);//2
System.out.println(num1%num2);//0
//先使用再自增
inta=1;
System.out.println(a++);//1
System.out.println(a);//2
//先自增再使用
intb=2;
System.out.println(++b);//3
System.out.println(b);//3
//先试用再自减
intc=3;
System.out.println(c--);//3
System.out.println(c);//2
//先自减再使用
intd=4;
System.out.println(--d);//3
System.out.println(d);//3
}
}
+-*/的深入使用
---------------------深入---------------------
//特殊点1:byte做运算,会向上转型成int类型
//注意:向上转型(自动转型)使用最高位补位
byteb1=10;
byteb2=20;
//底层原理:
//b1 - byte:0000,1010
// int:0000,0000,0000,0000,0000,0000,0000,1010
//b2 - byte:0001,0100
// int:0000,0000,0000,0000,0000,0000,0001,0100
//加法结果 :0000,0000,0000,0000,0000,0000,0001,1110
// (byte):0001,1110
byteresult= (byte)(b1+b2);
System.out.println(result);
//特殊点2:short做运算,会向上转型成int类型
//注意:向上转型(自动转型)使用最高位补位
shorts1=10;
shorts2=20;
//底层原理:
//s1 - short:0000,0000,0000,1010
// int:0000,0000,0000,0000,0000,0000,0000,1010
//s2 - short:0000,0000,0001,0100
// int:0000,0000,0000,0000,0000,0000,0001,0100
//加法结果 :0000,0000,0000,0000,0000,0000,0001,1110
// (short):0000,0000,0001,1110
shortresult= (short)(s1+s2);
System.out.println(result);
为什么byte或short做运算会向上转型成int类型?
因为CPU每次去取数据按照32位取
//特殊点3:除了byte或short做运算会向上转型成int类型,其余的数值型会按照取值范围大的类型转型后再做运算符
byteb=10;
shorts=10;
inti=10;
longl=10;
floatf=10;
doubled=10;
System.out.println(b+s);//int
System.out.println(b+i);//int
System.out.println(s+i);//int
System.out.println(i+l);//long
System.out.println(i+f);//float
System.out.println(l+f);//float
System.out.println(f+d);//double
特殊点4:char类型做运算会获取字符的ASCII
charc='a';//ASCII-97
System.out.println(c+1);//98
特殊点5:++a; 和b++;没有区别,因为分号表示执行语句的结束,不管先加还是后加,都会加
inta=10;
++a;
System.out.println(a);//11
intb=10;
b++;
System.out.println(b);//11
特殊点6:
inti=10;
//底层原理:i = (int)(i+1);
++i;
System.out.println(i);//11
byteb=10;
//底层原理:b = (byte)(b+1);
++b;
System.out.println(b);//11
经典面试题一:输出结果为?
inta=8;
intb= (a++)+(++a)+(a*10);
//a = 10
//b = 8 + 10 + 10*10
System.out.println(b);//118
经典面试题二:输出结果为?
inti=0 ;
//底层实现:
//i = (int)(i+1);
//i = i;
i=++i;
System.out.println(i);//1
经典面试题三:输出结果为?
inti=0 ;
//底层实现:
//int temp = i;//temp记录了i最初的值 -- 0
//i = (int)(i+1);
//i = temp;
i=i++;
System.out.println(i);//0
经典面试题四:输出结果为?
注意:++、--比+、-、*、/、%的优先级更高
inta=5;
System.out.println(a++*++a);//5*7 - 35
经典面试题五:输出结果为?
注意:++、--比+、-、*、/、%的优先级更高
inta=5;
System.out.println(++a*++a);//6*7 - 42
经典面试题六:输出结果为?
注意:++、--比+、-、*、/、%的优先级更高
inta=5;
System.out.println(++a*a++);//6*6 - 36