高淇 java基础教程笔记
发布时间:2024-08-31
发布时间:2024-08-31
尚学堂——高淇主讲 300集
第一讲:JAVA 如何学习
第二讲:计算机语言的发展史——java历史/核心优势 计算机语言发展历程:逐渐趋向人类能理解的语言
机器语言:即计算机能理解的语言。由0和1代码组成。 汇编语言:使用英文缩写的助记符来表示基本计算机操作,主要通过操作指令来进行对
计算机的操作。
高级语言:面向过程、面向对象 Java 简史:
SUN( Stanford University Network )公司 Green 项目
Java 发明人:James Gosling 发展历史:
1991年,SUN公司的Green项目,Oak 1995年,推出java测试版 1996年,JDK1.0 1997年,JDK 1.1 1998年,JDK1.2 ,大大改进了早期版本的缺陷,是一个革命性的版本,更名为Java2 2004年,J2SE 5.0 ( 1.5.0 ) 2006年,J2SE6.0 ( 1.6.0 ) 2011年,JAVASE7.0
互联网发展(java发展机遇) JAVA核心优势:
----跨平台
JAVA 各版本和体系结构
J2EE ( JAVAEE ) :JAVA 2 Enterprise Edtion——定位在服务器端的应用
J2SE ( JAVASE ): JAVA 2 Standard Edtion ——定位在个人计算机上的应用 J2ME ( JAVAME ):JAVA 2 Micro Edtion——定位在消费性电子产品的应用上。 第三讲:JDK /JRE /JVM 区别
JDK & JRE & JVM(包含关系)
JDK ——Java Development’ kit :java 开发工具包 JRE ——Java Runtime Environment :java 运行环境 JVM——Java Virtual Machine :JAVA 虚拟机
尚学堂——高淇主讲 300集
JVM 和 java跨平台特性
JAVA 环境变量的配置
测试
尚学堂——高淇主讲 300集
第四讲:第一个java程序/第五讲 第一个java程序
代码编写 编译 执行
程序中可能出现的错误
“ java ” 不是内部或外部命令,也不是可运行的程序或处理文件。 Java 区分大小写。 总结和提升
Java对大小写敏感。
关键字class表明java程序中的全部内容包含在类中,java是一种面向对象的语言。 Main() 方法是java应用程序的入口方法。
在java中,用花括号划分程序的各个部分,任何方法的代码都必须以”{“开始,
以”}“结束,由于编译器忽略空格,所以花括号风格不受限制。 Java 一个语句可以跨多行,其中每个语句必须以分号结束。 一个源文件可以有多个class
一个源文件中至多只能有一个public的类声明,其它类的个数不限,如果源文件中
包含一个public类源文件名必须和它中定义的public的类名相同,且以”java“为扩展名。
编程风格
注意缩进
成对编程——括号、引号都应该写完后,再往里加内容 见名知意 Java注释
注释就是程序员为读者作的说明,是提高程序可读性的一种手段
注释不会出现在字节码文件中。即java编译器编译时会跳过注释语句 // 单行注释(注释内容从// 到本行结束) /* */ 多行注释——注释不能嵌套 常用dos命令
Cd进入一个目录 Cd..:改变目录
Dir:查看目录里面的内容 上下键:查找敲过的命令 Tab键:命令自动补齐
尚学堂——高淇主讲 300集
第六讲:标识符/Unicode和GBK各种字符集的关系 标识符(identifier)
作用——给变量、类和方法命名 Java标识符命名规则:
标识符必须以字母、下划线_、美元符$开头。
标识符其它部分可以是字母、下划线_、美元符$和数字的任意组合。 Java标识符大小写敏感,且无长度限制。 不可以是java关键字
注:java不采用通常语言使用的ASCII字符集,而是采用unicode这样的标准
的国际字符集,因此这里字母的含义:英文、汉字等。
字符集简介
ISO8859-1 ——西欧字符集
BIG5 ——台湾的五大码,表示繁体字
GB2312 ——大陆最早使用的简体中文字符集 GBK ——GBK2312 的扩展,可以表示繁体字 GB18030 ——最新GBK的扩展,中国所有非手持/嵌入式计算机系统的强制性实施
标准。可以表示汉字、维吾尔文、藏文等中华民族字符。 Unicode ——国际通用字符集 java关键字
第七讲:数据类型/进制转换/编程中的L问题
java是一种强类型语言,每个变量都必须声明其类型
整型变量
Java语言整型常量的表示形式:
— 十进制整数 — 八进制整数 — 十六进制整数
Java语言的整型常数默认为int型,声明long型常量可以加”l“或”L“ (建议使
用大写,小写容易误认为数字1)
进制转换
尚学堂——高淇主讲 300集
转换代码:
System.out.println( Intger.toBinaryString( 需要转换的变量 ) ); //二进制 System.out.println( Intger.toOctalString( 需要转换的变量 ) ); //八进制 System.out.println( Intger.toHexString( 需要转换的变量 ) ); //十六进制 如果数据大小没有超过byte/short/char 的表述范围,则可以自动转型 第八讲:浮点数/浮点数误差问题 浮点型
Float类型又称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float
类型的精度很难满足需求。
Double 表示这种类型的值精度是float类型的两倍,又被称为双精度,绝大多部分
应用程序都采用double类型。 Java 浮点类型常量有两种表示形式
— 十进制形式,如:3.14
— 科学记数法形式,如:134e2、314E2、314E-2
浮点数值默认为double类型。要将其变为float类型,需要在后面增加F/f如:1.3f 总结
—
— 默认类型是double
— 浮点数存在舍入误差,很多数字不能精确表示,如果需要进行不产生舍入
误差的精确数字计算,需要使用BigDecimal类。 — 最好避免比较中使用浮点数
第九讲:char –字符串入门 字符型char
单引号用来表示字符常量。如:’ A ’,是一个字符,它与” A “是不同的,”A “表示含
有一个字符的字符串。
Char 类型用来表示unicode编码表中的字符
Unicode 编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536
个字符;
Java语言允许使用转义字符‘\‘来将其后的字符转变为其它的含义。 Char 是在0-65535范围,运算时直接当作整数来运算。 可以把0-65535之间的整数直接转型为char 布尔类型boolean(一位,不是一个字节)
Boolean 类型有两个值,true 和false
Boolean用来判断逻辑条件,一般用于程序流程控制 第十讲:基本数据类型自动转换/强制转型 自动类型转换
容量小的数据类型可以自动转换为容量大的数据类型(容量表示类型的范围,而不
是字节数)
特例:可以将整型常量直接赋值给byte,short, char等数据类型变量,而不需要
尚学堂——高淇主讲 300集
进行强制类型转换,只要不超过其有效范围。
强制类型转换
强制类型转换,又称为造型,用于显式的转换一个数值的类型,在有可能丢失信息
的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。 当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截
断成为一个完全不同的值。
基本类型转换时常见错误和问题
操作比较大的数时,要留意是否溢出尤其是整数操作时
L和l的问题——不要命名名字为l 的变量、long类型使用大写L 不要用小写l 运行时表达式中的类型提升问题
所有的一元运算符(+ - * / %),都会有类型提升的问题 第十一讲:JDK7.0 新特性/二进制整数/下划线 二进制整数/下划线
表示形式:0b开头;如表示byte表示1 为:0b00000001
若觉得查看不方便可以使用下划线分隔符(常用于写一些比较长的数字) 如:123_321_456等
第十二讲:变量-成员变量-局部变量/常量-命名规范 变量
Java是一种强类型语言,每个变量都必须声明其类型。
Java变量是程序中最基本的存储单位,其要素包括变量名,变量类型和作用域。 变量在使用前必须对其声明,只有在变量声明以后才能为其分配相应长度的存储单
元,声明格式为: typevarName [ =value ] [ {,varName[ =value]}]; 注意事项:
——每个变量都有类型,类型可以是基本类型,也可以是引用类型。 ——变量名必须是合法的标识符。
变量声明
变量声明举例:int a;booleanvalue; double salary;
可以在一行中声明多个变量:intx,y,z ; //both are integers
——不提倡这种风格,逐一声明每一个变量可以提高程序可读性。 可以将变量的声明和初始化放在同一行中,如:int age = 18; 局部变量和实例变量
局部变量:方法或语句块内部定义的变量
尚学堂——高淇主讲 300集
——在使用前必须声明和初始化(赋初值)。 实例变量(成员变量):
——方法外部、类的内部定义的变量(属性 )
——如果不自行初始化,它会自动初始化该类型的默认初始值(数值类型变量初始化成0或0.0 ,字符型变量的初始化值是16位的0 ,布尔型默认是false)\u0000
常量 final
其值无法改变的量
只能被初始化一次(只要赋值则其值无法改变) 常量的命名通常使用全大写,如果单词较多则使用下划线进行分隔如:MAX_VALUE 命名规范
所有变量、方法、类名:见名知意 变量、方法名:
——首字母小写和驼峰原则如:run(), runRun(), age ,ageNew 常量:——大写字母和下划线:MAX_VALUE
类名:——首字母大写和驼峰原则如:Man,GoodMan 第十三讲:运算符——算术/逻辑/位运算/扩展运算符
算术运算符
二元运算符类型提升(有两个操作数)
整数运算:
——如果两个操作数有一个为long,则结果也为long
——没有long时,结果为int,即使操作数全为short、byte,结果也是int 浮点运算
——如果连个操作数有一个为double,则结果为double ——只有两个操作数都是float ,则结果才为float
一元运算符(++,--)
——如:int a=3;
——如:int b = a++; //执行完后,b=3 ,先给b赋值,再自增 ——如:int c = ++a; //执行完后,c=5 ,先自增,再给b赋值
逻辑运算符(只能操作布尔变量)
逻辑与:&&只要有一个为false则为false ,只有全为true才会是true(短路问题) 逻辑或:||只要有一个为true则为true ,只有全为false才会是false(短路问题) 逻辑非:!相反
尚学堂——高淇主讲 300集
逻辑与和逻辑或采用短路的方式。从左到右计算,如果确定值则不会再计算下去。 位运算符(按位操作)
对进制进行操作(0是false ,1为true)
&——按位与:只要有一个为0则为0 ,只有全为1才会是1 | —— 按位或:只要有一个为1则为1 ,只有全为0才会是0 ^ —— 按位异或:相异(两个值不一样),相同则为0 ,不同则为1 扩展运算符
第十四讲:字符串连接—三元运算符—优先级 字符串连接符 +
“ + ” 运算符两则的操作数中只要有一个字符串(string)类型,系统会自动将另一
个操作数转换为字符串然后再进行连接。
三元运算符
语法格式:—— x ? y : z
——其中x为boolean类型表达式,先计算x的值,若为true ,则整个三目运算的
结果为表达式y的值,否则整个运算结果为表达式z的值。 经常用来代替简单的if –else 判断! 运算符优先级
表达式里面优先级使用小括号来组织 第十五讲:eclipse的使用 第十六讲:eclipse的使用
第十七讲:if语句—单选择—双选择—多选择结构 控制语句
选择 顺序 循环 If单选择结构
尚学堂——高淇主讲 300集
If-else 双选择结构
If-else if-else多选择结构
第十八讲:switch语句—基本用法—穿透现象
尚学堂——高淇主讲 300集
第十九讲:JDK 7.0 新特性—增强switch 语句 增强switch语句
JDK 7.0 之前:表达式结果只能是int(可以自动转为byte 、short 、char),枚举
类型
表达式结果可以是:字符串如下代码所示:
第二十讲:while 语句——do while 语句 While循环语句
——在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。
而对于后来每一次额外的循环,都会在开始前重新计算一次。
——语句中应有使循环趋向于结束的语句,否则会出现无限循环(死循环)。
尚学堂——高淇主讲 300集
Do —while 语句
第二十一讲:for语句 For语句
课堂练习代码
1.用while和for 循环分别计算100以内奇数和偶数的和,并输出。
2.用while和for循环输出1—1000 之间能被5整除的数,且每行输出三个。
尚学堂——高淇主讲 300集
第二十二讲:综合练习——九九乘法表 打印输出九九乘法表
第二十三讲:break 和continue ——带标签的break和continue 在任何循环语句的主体部分,均可用break控制循环的流程,break用于强行退出循环,
不执行循环中剩余的语句。(break 语句还可用于多分支语句switch中)。
Continue 语句用于在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执
行的语句,接着进行下一次是否执行循环的判定。
带标签的break 和continue
Goto关键字(了解即可)
第二十四讲:方法—方法的本质—形参/实参—return语句
Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,声明格式:
[ 修饰符1 修饰符2 … ] 返回值类型方法名(形式参数列表){ Java语句; …… }
形式参数:在方法被调用时用于接收外界输入的数据 实参:调用方法时实际传给方法的数据
返回值:方法在执行完毕后返还给调用它的环境的数据
返回值类型:事先约定的返回值的数据类型,如:无返回值,必须给出返回值类型
void。
Java语言中使用下述形式调用方法:对象名.方法名(实参列表)
尚学堂——高淇主讲 300集
实参的数目,数据类型和次序必须和所调用方法声明的形参列表匹配 Return 语句终止方法的运行并指定要返回的数据
Java中进行方法调用中传递参数时,要遵循值传递的原则:
——基本类型传递的是该数据值本身,引用类型传递的是对对象的引用,而不是对象本身。
Java中只有值传递! 第二十五讲:递归算法 递归算法
递归本身是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就
是“自己调用自己”,一个递归技术的方法将会直接或者间接的调用自己。 递归算法包括两个部分
——定义递归头 //什么时候不调用自身方法,如果没有递归头,将会进入死循环。 ——递归体 //什么时候需要调用自己 第二十六讲:API文档—package的概念
API 是什么?——Application Programming Interface 应用程序编程接口 Package 包的用法(作用类似于文件夹)
为什么需要package?
——为了解决类之间重名问题
——为了便于管理类:合适的类位于合适的包! Package怎么用?
——通常是类的第一句非注释性语句。 ——用打包语句:package 包名;
——包名:域名倒着写即可再加上模块名,并与内部管理类 注意事项:
——写项目时都要加包,不要使用默认包
——com.gao和com.gao.car,这两个包没有包含关系,是两个完全独立的包,只是逻辑上看起来后者是前者的一部分
JDK 中主要的包
http://www.77cn.com.cnng ——包含一些java语言的核心类
Java.awt ——包含了构成抽象窗口工具集的多个类用于(GUI) http://www.77cn.com.cn ——包含执行与网络相关的操作的类 Java.io ——包含能提供多种输入/输出功能的类 Java.util ——包含一些使用工具类 API 文档的生成
特殊的注释:——文档注释:/**
使用JAVADOC生成API文档——解决问题:代码和文档的分离 常用的java注释标签: ——@auther作者 ——@version 版本 ——@param参数
——@return 返回值的含义 ——@throws 抛出异常描述
第二十七讲:键盘输入——scanner类的使用—import使用 Scanner类(实现计算机与用户的交互)
尚学堂——高淇主讲 300集
Scanner s = new Scanner(System.in); //系统输入 Import 导入包
第二十八讲:面向对象——面向过程和面向对象的本质区分 面向对象——以对象的方式,组织代码,封装数据
面向对象与面向过程区分
第二十九讲:面向对象—面向对象方式思考问题 高组织管理层
第三十/三十一讲:面向对象—类和对象的关系 面向对象编程(OOP)的本质:
——以类的方式组织代码,以对象的方式组织(封装)数据 面向对象思维:OOA(分析), OOD(设计) 对象:具体的事物
类:是对对象的抽象(抽象抽出象 [相似]的部分)类似于分类
先有具体的对象,然后抽象各个对象之间的部分,归纳出类通过类再认识其他对象。 对象和类总结:
对象和类的关系:特殊到一般,具体到抽象
尚学堂——高淇主讲 300集
类:class
对象:object ,instance(实例)。
类可以看成一类对象的模版,对象可以看成该类的一个具体实例 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。
对象是java程序的核心,在java程序中“ 万事万物皆对象” 。
JDK 提供了很多类供编程人员使用,编程人员也可以定义自己的类。 第三十一讲:面向对象—程序执行过程内存分析
引用类型:(在没有进行赋值之前系统默认为null)
——java语言中除基本类型之外的变量类型都称为引用类型。 Java中的对象是通过引用reference(地址)对其操作的。 类的属性:(代表静态数据)
属性:field ,或者叫成员变量
属性用于定义该类或该类对象包含的数据或者说静态属性 属性作用范围是整个类体
在定义成员变量时可以对其初始化,如果不对其初始化,java使用默认的值对其初
始化。(数值:0,0.0 char :\u0000 , Boolean :false 所有引用类型:null) 属性定义格式:
—— [修饰符]属性类型属性名 = [ 默认值 ]
类的方法:(动态行为)
面向对象中,整个程序的基本单位是类,方法是从属于类的。 方法定义格式:
—— [ 修饰符 ] 方法返回值类型方法名(形参列表){ //n 语句方法体 } Java中方法参数传递是:值传递! 变量的作用域
局部变量必须对其进行初始化,实例变量则不必须 内存分析
尚学堂——高淇主讲 300集
栈:自动分配连续的空间,后进先出
——存放:局部变量 堆:不连续的空间
——存放new出来的对象 方法区:(属于堆里面的一个特殊示例)
——存放:类的信息(代码-属性、方法)、static变量、常量池(字符串常量)等。 操作对象就是操作地址
代码(如下)