本博文为学习高淇老师java视频的笔记。
1.不仅要学习java的语法,更要深入到内存结构、分析JDK源代码。
高手都拥有好的习惯,打好基础是关键。
2.所有代码现场手敲,真实展现代码编写过程。
3.第一季98集,主要讲解java编程基础,通过游戏项目提高编程能力。打基础的,比较重要。
4.编程语言怎么学?
找准一门语言,精通它。。。各种语言之间都是有渊源的。。。必须精通。。。用高手的标准要求自己,养成高手的习惯。
5.计算机语言发展历史
如产品,向着人更容易使用的方向发展,功能越来越强大。
第一代,机器语言。由01组成的字符串,直接给机器用。人使用不友好。
第二代,汇编语言。用单词代替01。
摩尔定律:每隔18个月,电脑性能翻一番。晶体管每隔一年半,工艺提升一倍。
第三代,高级语言,包括面向过程和面向对象。面向过程的语言有:C、Fortran、cobol、pascal、ada。面向对象:C++、java、C#。
java有一个别名叫C++-。java的核心优势在于跨平台。C#是微软山寨java的产品。
6.SUN公司
美国:SUN(stanford university network)公司。
中国大陆:太阳计算机系统(系统)有限公司。
台湾:升阳电脑公司。
java为什么被发明?
green项目。创造像电视盒这样的消费电子产品。要求:语言本身是中立的,也是跨平台的。james gosling发明了java语言。
java为什么能够流行?
*互联网的爆发式发展。
*互联网的电脑硬件不同,软件环境差异较大,需要一个跨平台的语言。
2011年,推出javase7.0。企业一般用的最多的还是2004年推出的J2SE5.0(1.5.0) Tiger老虎; 和J2SE6.0(1.6.0)Mustang野马。企业一般不用最新版的,用最稳定的。
不管以后流行哪种新的语言,新的东西必定是在旧的基础上创造出来的,所以精通了旧的,学习新的就不会有困难。
7.JAVA各版本和体系架构
*J2EE(JAVAEE)
Java 2 enterprise edition;
定位在服务器端的应用。
J2SE(JAVASE)
*java 2 standard edition;
定位在个人计算机上的应用。
*J2ME(JAVAME)
java 2 micro edition;
定位在消费电子产品的应用上。
学习java的时候用JAVASE。
003. JDK和JRE和JVM的区别_JDK的下载安装_环境变量配置_测试安装成功
3.1 JDK&JRE&JVM
**JDK
Java development kit java开发工具包
**JRE
Java runtime environment java运行时环境
**JVM
java virtual machine java虚拟机
三者的关系:JDK包含JRE,JRE包含JVM。jvm用来执行字节码;JRE用来加载外部的环境;jdk提供了很多开发工具和api,有助于写、调试程序。
3.2 JVM(JAVA VIRTUAL MACHINE)
JAVA的核心优势是跨平台,同一个java程序可以在不同的平台上运行,sun公司为每一个平台都写另一个java虚拟机,所以程序员可以只关注java程序本身,而不必关注平台的差异。java程序被送到一个平台之后,首先就是经由该平台上的jvm处理。
*JVM是一种规范。就是一个虚拟的用于执行bytecodes字节码的计算机。
*可以使用软件来实现。IBM,SUN,BEA等。也可以自己写一个JVM。
*可以使用硬件来实现。比如sun/intel公司正在研发的java芯片。
3.3 JVM和java跨平台特性
3.4 JAVA开发环境配置
**下载(JDK):
Download J2SDK(Java 2 Software Development Kit) from http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
**安装:
run the executable(跟普通软件安装一样,点击下一步就ok)。
**环境变量配置
JAVA_HOME : C:\Program Files\Java\jdk1.7.0_45
path(执行dos命令,系统会在path指定的路径中寻找该命令对应的可执行文件)
- 将"%JAVA_HOME%/bin"增加到path中;多个目录用分号隔开。
classpath---JDK5.0以上版本,可以不对其进行配置。
**开发DOS窗口:
--运行→cmd
**输入命令: java -version
**出现如下图所示,则安装成功:
**疑问:
--配置完java环境变量后,最好重启DOS窗口。重启后新配置的环境变量才生效。
004_第一个程序_HelloWorld
4.1 第一个java程序
**代码编写:(程序员编辑代码并保存在磁盘上)
public class Welcome{
public static void main(String[] args){
System.out.println("Helloword!大家好");
}
}
--保存为Welcome.java
**编译阶段(编译器创建class字节码文件)
--进入java文件所在目录,执行命令:javac Welcome.java
**执行阶段:
--进入java文件所在目录,执行命令: java Welcom
005_helloworld深化_文本编辑器的使用_注释
5.1 常用java开发工具
**文本编辑器(选择任意一个)
- UltraEdit
- Editplus
- notepad++
**集成开发环境(IDE: integrated development environment)
- JBuilder (http://www.borland.com)(基本淘汰)
- Eclipse(http://www.eclipse.org)****(重点)
- NetBeans (http://java.sun.com)
5.2 第一个java程序的总结和提升
**Java对大小写敏感,如果出现了大小写拼写错误,程序无法运行。
**关键字class表明Java程序中的全部内容都包含在类中,Java是一种面向对象的语言。
**main方法是Java应用程序的入口方法,它有固定的书写格式:
public static void main(String[] args){...}
**在Java中,用花括号划分程序的各个部分,任何方法的代码都必须以“{”开始,以“}”结束,由于编译器忽略空格,所以花括号风格不受限制。
**Java一个语句可以跨多行,每个语句必须以分号结束,回车不是语句的结束标志。
**一个源文件可以有多个class。
**一个源文件中至多只能有一个public的类声明,其他类的个数不限,如果源文件中包含一个public类源文件名必须和它中定义的public的类名相同,且以“java”为扩展名。
5.3 编程风格
**注意缩进!
-- 一定要有缩进。缩进就像人得体的衣着一样。
**成对编程!
--括号、引号都应该写完后,再往里面加内容。
**见名知意!
--最基本的要求!
5.4 JAVA注释
**注释就是程序员为读者作的说明,是提高程序可读性的一种手段。
**注释不会出现在字节码文件中。即JAVA编译器编译时会跳过注释语句。
//单行注释:注释内容从//到本行结尾。
/* */多行注释。注意 /* */注释不能嵌套。
5.5 常用dos命令
cd : 进入一个目录。(change directory)
cd... : 如cd mycode
dir: 查看目录下的文件
上下键: 查找敲过的命令。
Tab键: 命令自动补齐。
006_标识符_unicode和GBK_各种字符集的关系
6.1 标示符Identifier
**作用: 给变量、类和方法命名。
**Java标示符有如下命名规则:
--标识符必须以字母、下划线、美元符$开头。
--标示符其他部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
--Java标识符大小写敏感,且长度无限制。
--不可以是Java的关键字。
**注:
--Java不采用通常语言使用的ASII字符集,而是用unicode这样的标准的国际字符集。因此,这里的字母的含义:英文、汉字等等。(不建议大家使用汉字来定义标识符!)
**不合法的标识符:
int 1a=3; //不能用数字开头
int a#=3; //不能包含#这样的特殊字符
int int=3; //不能使用关键字
java可以用中文命名,因为java内部采用了Unicode字符集,Unicode字符集是2个字节表示一个字符。
1个字节占8位,共可以表示2^8=256个状态。2个字节占16位,共可以表示2^16=65536个状态。足以表示目前世界上的通用文字语言了。
6.2 关键字/保留字
**Java关键字是Java语言保留供内部使用的,如class用于定义类。关键字也可以成为保留字,它们的意思是一样的。
**注意:不要可以去背! 后面会慢慢介绍每个关键字的用法
6.3 字符集简介
**ISO8859-1 : 西欧字符
**BIG5 : 台湾的大五码,表示繁体汉字
**GB2312 : 大陆使用最早、最广的简体中文字符集
**GBK : GB2312的扩展,可以表示繁体中文
**GB18030 : 最新GBK的扩展,中国所有非手持/嵌入式计算机系统的强制实施标准,可以表示汉字、维吾尔文、藏文等中华民族字符
**Unicode : 国际通用字符集。UTF-8字符集用1个字节表示西欧字符、2个字节表示英文字符、3个字节表示汉字。
007_整数类型_进制转换_编程中的L问题
7.1 JAVA基本数据类型
Java是一种强类型语言,每个变量都必须声明其类型。
JAVA基本数据类型有8种,整数类型就占了4种。
7.2 整型变量
** Java语言整型常数的三种表示形式:
十进制整数,如: 99, -500, 0
八进制整数,要求以0开头,如015
十六进制数,要求以0x或0X开头,如: 0x15
**Java语言的整型常数默认为int型,声明long型常量可以加‘l’或‘L’(建议使用大写,小写容易误认为数字1),如:
long a = 55555555; //不出错,在int表示的范围内(21亿内)。
long b =55555555555; //不加出错,已经超过int表示的范围。
public class TestDataType{
public static void main(String[] args){
int a=10;
int a2=010;
int a3=0xf;
// byte b=200;
// System.out.println(b);
System.out.println(a);
System.out.println(a2);
System.out.println(a3);
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toOctalString(a));
System.out.println(Integer.toHexString(a));
int a5=10;
long a6=200;
byte b2=100; //如果数据的大小没有超过byte/short/char的表示范围,则可以自动转型
long a7=11123567886L;
long l=3;
long l2=l+3; //L问题
}
}
**如果数字连long型都不够用,那么还有一种BigInteger类型的,可以表示超大整型的。
**8进制以0开头,8进制中的8个数分别表示为:0,1,2,3,4,5,6,7。所以,010就表示8(逢八进一)。
**16进制以0x或0X开头,16进制中的16个数分别表示为:0,1,2,3,4,5,6,7,8,9,a,b、c、d、e,f。所以,0x10就表示16。
008_浮点数_浮点数误差问题
8.1 浮点型
**float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足要求。
**double表示这种类型的数值精度是float类型的两倍,又被称作双精度,绝大部分应用程序都采用double类型。
**Java浮点类型常量有两种表示形式
-- 十进制形式,例如:
3.14 314.0 0.314
-- 科学记数形式,如:
314e2 314E2 314E-2
**浮点数值默认为double类型。要将其变为float类型,需要在后面增加F/f,如: 3.14F
**使用总结:
--默认是double
--浮点数存在舍入误差,很多数字精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
--最好避免在比较中使用浮点数。
//测试浮点数
public class TestFloatType{
public static void main(String[] args){
//double d=3.14; //浮点数常量默认类型是double。
//float f=6.28F;
double d2=3.14e-2; //采用科学计数法的写法
System.out.println(d2);
float f=0.1f;
double d=1.0/10;
System.out.println(f==d); //false
}
}
**int类型与float类型的比较:
int类型也是4个字节,表示的范围为: -2^31 ~ 2^31-1 。而同样是4个字节的float类型却可以表示-3.403E38 ~ 3.403E38之间的数,范围远大于int的。为啥还要说float类型有舍入误差?因为int类型可以精确地表示 -2^31 ~ 2^31-1之间的所有的、确切的整数,无一遗漏。而float类型终究之用4个字节,是有限的,但-3.403E38 ~ 3.403E38之间的小数却是无限的,显然float类型是装不下的,这就必然会导致舍入误差。同样的道理,double类型也存在舍入误差,尽管double类型可以表示的范围比float远大。
009_char_字符串入门_boolean
9.1 字符型(2个字节)
**单引号用来表示字符常量。例如‘A’是一个字符,她与“A”是不同的,“A”表示含有一个字符的字符串。
**char类型用来表示在Unicode编码表中的字符。
**Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许65536个字符;
java语言中还允许使用转义字符‘\’来将其后的字符转变为其他的含义:
char c2='\n'; //代表换行符
**char是在0-65535范围,运算时直接当做整数来运算。
**可以把0-65535之间的整数直接转型为char
9.2 boolean类型(一位,不是一个字节)
**boolean类型有两个值,true和false
**boolean类型用来判断逻辑条件,一般用于程序控制
**实践:
--请不要这样写: if(is ==true && done == false),只有新手才那么写。
对于任何程序员if(whether && !done)都不难理解吧。所以去掉所有的==false和==true。
//测试char
public class TestCharType{
public static void main(String[] args){
/*
char c1='a';
char c2='尚'; //unicode 2:0-65535
char c3='\n';
// System.out.println(c1);
// System.out.println(c2); //换行
System.out.print(c1);
System.out.print(c3); //不换行
System.out.print(c2);
*/
/*
char c4='a';
int i=c4+2; //a对应的ascii码是95,所以i的值为97
char c5=(char)i; //强制转型
System.out.println(c5);
//循环打印
for(int j=0;j<26;j++){
char temp=(char)(c4+j);
System.out.print(temp);
}
//java里面的字符串,是定义成:String类了。
String str="abcdefghijklmnopqrstuvwxyz";
System.out.println("\n"+str);
*/
boolean b=false; //false
if(b){
System.out.println("true");
}
}
}