java从入门到精通
2023-06-10 14:01:08 0 举报
AI智能生成
EEE
作者其他创作
大纲/内容
第一章初识java
java简介
java的应用领域
桌面应用系统开发,嵌入式系统开发,电子商务应用,企业级应用开发,交互式系统开发,多媒体系统开发,发布式系统开发,wed应用开发,移动端应用开发
什么是java语言
Java是一种通用的,基于类的,面向对象的编程语言。它是用于应用程序开发的计算平台。因此,Java是快速,安全和可靠的。它被广泛用于在笔记本电脑,数据中心,游戏机,科学超级计算机,手机等中开发Java应用程序。
java的版本
主要分为两个,javase ,javaee,一般用的多的是javase这是标准版
java语言的特性
跨平台/可移植性,安全性,面向对象,简单性,高性能,分布式,多线程,健壮性<br>
第二章熟悉eclipse开发工具
熟悉eclipse
透视图与视图
透视图是一个包含一系列视图和内容编辑器的可视容器,默认的透视图叫java。 透视图是Eclipse工作台提供的附加组织层,它实现多个实图的布局和可用操作的集合,并为此集合定义一个名称,起组织的作用。 Eclipse窗口可以打开多个透视图,但在同一时间只能有一个透视图处于激活状态,用户可以在两个透视图之间切换。
菜单栏
java的一些功能菜单栏
工具栏
位于菜单栏的下方,工具栏中的都是菜单栏的快捷键
使用eclipse
创建java项目
创建一个项目,第一个框框为项目名,然后在jre中选择Java版本,然后点击netc,弹出窗口后图中,所有的代码都会存储在src中,再点击finiish,然后点击主界面中window里的new window,弹出下图,打开hello旁的小箭头,删除src下的无用文件<br>
创建java类文件
右键src,new,再点击class创建一个类。<br>在Name中添加需要创建的类名(类名shoul首字母必须是大写),再勾选public static void.....<br>最后点击finfsh<br>
运行java文件
点三角形图像就能运行了
第三章java语言基础
java主类结构
Java语言是面向对象的程序设计语言,Java程序的基本组成单元是类,类体中又包括属性和方法两部分。每个应用程序都必须包含一个main()方法,含有main()方法的类称为主类。
基本数据类型
整型byte 、short 、int 、long
虽然byte、short、int、long 数据类型都是表示整数的,但是它们的取值范围可不一样。
浮点型float 、 double
float 和 double 都是表示浮点型的数据类型,它们之间的区别在于精确度的不同。<br>
字符型char
初始化方式
布尔型boolea
boolean 型只有两个取值 true 和 false<br>它的默认值是 false<br>对于布尔型占用的空间,得看JVM对于它的具体实现,有些JVM底层其实是使用0和1来表示true和false,那么就是4字节。
变量与常量
声明变量
变量就是指代在内存中开辟的存储空间,用于存放运算过程中需要用到的数据。 变量的声明 变量必须先声明后使用。 相同的变量只能声明一次。 格式:变量类型 变量名 = 变量值
声明常量
在运行中不会发生变化的量,final 数据类型 常量名称 【=值】
标识符
Java 中标识符是为方法、变量或者其他用户定义项定义的名称。<br>标识符用来对变量、常量、类和方法等进行命名。
关键字
它们用来表示一种数据类型,或者表示程序的结构等。<br>保留字是为 Java 预留的关键字,
运算符
赋值运算符
=
算术运算符
+-*、%
自增和自减运算符
++a a++ --a a--
比较运算符
逻辑运算符
位运算运算符
三元运算符
条件式 ? 值1 :值2
运算符优先级
数据类型转换
隐式类型转换
隐式类型转换由编译器自动进行,不需要程序员干预。<br><br>隐式类型转换通常有两种情况:赋值转换和运算转换。
显式类型转换
显示类型转换由程序员明确指定,显示类型转换也称为强制类型转换。
流程控制
复合语句
复合语句是以整个块为单位的语句,所以又称为块语句,复合语句由“{”开始,以“}”结束。复合语句中的每个语句都是从上到下执行的,并且在复合语句中可以嵌套复合语句。
条件语句
Java 中的条件语句允许程序根据条件的不同执行不同的代码块。 一个 if 语句包含一个布尔表达式和一条或多条语句。
if语句
switch语句
循环语句do.....while
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。<br><br>do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
循环语句while
for循环语句
<br>
循环控制break
当在循环中遇到 break 语句时,循环终止并进行程序控制在循环后的下一条语句中恢复。
循环控制continue<br>
continue 语句类似于 break 语句,但它只能出现在循环体中。它与 break 语句的区别在于:continue 并不是中断循环语句,而是中止当前迭代的循环,进入下一次的迭代,但只能在while中用<br>
数组
数组的概念
数组(array)是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来确定数组中唯一的元素。根据数组的维度,可以将其分为一维数组、二维数组和多维数组等,可以存储多个数据。
一维数组
当数组中每个元素都只带有一个下标时,这种数组就是“一维数组”。一维数组(one-dimensional array)实质上是一组相同类型数据的线性集合,是数组中最简单的一种数组。一般式,type[] arrayName; // 数据类型[] 数组名;
二维数组
二维数组好比一个表格,第一个下标表示行,第二个下标表示列,数组的创建和初始化与一位数组一模一样,及二维数组就是一个把多个一维数组包起来的数组。创建type[][] arrayName;或者 type arrayName[][];
数组的基本操作
1. 声明数组并开辟空间 2. 给数组各个元素赋值 3. 使用数组
数组排序算法
冒泡排序法
比较相邻的元素,如果第一个比第二个大,就交换它们两个;<br>对每一对相邻元素作同样的比价,从开始第一对到结尾的最后一对,这样在最后的元素就是最大的数;<br>针对所有的元素重复以上的步骤,除了数组最后已经排好序的数组;<br>重复步骤1~3,直到排序完成。
直接选择排序法
开始时,待排序序列为R[0]…R[n-1],经过选择和交换后,R[0]中存放最小关的记录<br>第二次待排序记录序列为R[1]…R[n-1],经过选择和交换后,R[1]为仅次于R[0]的具有次小关键字的记录;<br>如此类推,经过n-1次选择和交换之后,R[0]…R[n-1]成为有序序列,即可实现排序<br>
反转排序
类与对象
面对对象的概述
类其实就是一个模板,比如说类就好比一张房子的设计图纸,或者说是一个倒印模具,创建一个类就好比设计一张图纸,刻一个模板。对象就好比一座建好的房子,一个成型的模型,无疑想要一座房子或者一个模型都先需要一张图纸和一个模板,而这就是类和对象的关系。
对象
世间万物都可以是一个对象
类
类放在现实中,如人是一个对象,类就是对象的统称<br>类是对象的设计图
封装
把一个对象的静态和动态装入类中就叫封装,好处可以提高代码的复用性,就是可以用很多遍,不想用了可以丢一边,而放进类种的过程叫做封装
继承
父类的代码,子类可以不用写直接拿过来用<br>代码中,类中的属性,如果每个对象都会有就放在父类,如不是则放进子类
多态
一个类有特性不同的对象,会有不同状态的对象,这种叫做多态<br>官方一点的话叫做将父类的对象应用与子类的特征就是多态
类
局部变量
在动态属性也就是成员方法种的变量就是局部变量
成员方法
在某些情况下,我们在需要定义成员方法(简称方法)。比如人类:除了有一些属性外(年龄、姓名等),我们人类还有一些行为比如:可以说话,跑步,通过学习还可以做算术题等等。这时就要用成员方法才能完成。
成员变量
实例成员变量:是定义在方法外部和类内部的且不被static所修饰的变量.用于描述一个类中包含哪些数据
控制修饰符
static
静态的<br>public static void main(string[]args)<br>局部变量
this关键字
this可以调用成员方法和成员变量,也就是动态属性和静态属性,但只能在所在的类中使用
类的构造方法
构造方法没有返回值。<br>构造方法的名称要与本类的名称相同<br>如public Book(){<br>。。。//构造方法体<br><br>}
对象
语法<br>类名 引用变量的名称<br>一个people的引用可以用以下方法<br>people tom;<br>引用对象相关的语法如下<br>people tom =new people();
继承·多态抽象类与接口
类的继承
一个类继承另一个类需要使用另一类需要使用的关键字extends<br>使用方法为<br>class Child extends Parent{}
Object类
Object包括clone(),finalize等等方法<br>Object类中的几个重要方法<br>1.getClass()方法
对象类型的转换
向上转型<br>子类对象赋值给父类引用、<br>animal a = new Dog()
向上转型<br>子类对象赋值给父类引用、<br>animal a = new Dog()
使用instanceof关键字判断对象类型
语法<br>myobject instanceof ExampleClass
方法重载
final关键字
final修饰变量———不可改变的量(常量)<br><br>final修饰方法————不能被重写<br><br>final修饰类——不能被继承
final 类
语法
final 类名{}
多态
利用多态可以使程序具有良好的打展性,并可以对所有类对象进行通用的处理。在7.3节中已经学习过子类对象可以作为父类的对象实例使用,这种将子类对象视为父类对象的做法称为“向上转型”。假如现在要编写个绘制图形的方法 drawO,如果传入正方形对象就绘制正方形,如果传入圆形对象就绘制圆形,这种场景可以使用重载来实现,定义如下:<br><br>public vold draw(Square s){<br><br>//绘制正方形的方法<br><br>public void draw(Circular cK<br><br>//绘制圆形的方法<br>
抽象
抽象方法 abstract(抽象)<br>修饰符 abstract 返回参数 方法名 (传入参数);<br> 抽象类 有抽象方法的类一定是抽象类<br>修饰符 abstract class 类名{<br>}<br>如果父类是抽象类,子类是普通类那么重写抽象方法加入方法体<br><br>
接口
接口 所有方法都是抽象方法<br><br>修饰符 interface 接口名{<br><br>}<br><br>实现 implements<br><br>java语言每个类可以实习多个接口<br><br>修饰符 class 类名 implements 接口1 ,接口2,...{<br><br>}
包和内部类
类包
什么是类包
在java中每定义一个类,通过java编译器进行编译之后,都会生成一个扩展名为.class的文件。当程序的规模逐渐扩大时,就很容易发生类名称冲突的现象。<br>java中提供了一种管理类文件的机制,就是类包。
类名冲突
java中每个接口或类都来自不同的类包,无论是Java API中的类与接口还是自定义的类与接口,都需要隶属于某一个类包,这个类包包含了一些类与接口。
完整的类路径
一个完整的类名需要包含与类名的组合,每个类的隶属一个类包,只要保证同一类包中的类同名,就可以有效地避免同名类冲突的情况。
内部类
成员内部简介<br>
在一个类中使用内部类,可以在内部类中存取其所在类的私有成员变量。<br><br>在成员变量类中可以随意使用外部类的成员方法及成员变量,尽管这些类成员被修饰为private。
使用匿名类一个遵循原则
1.匿名类不能写构造方法<br><br>2.匿名类不能定义静态的成员<br><br>3.如果匿名类创建的对象没有赋值给任何引用变量,会导致该对象用完一次就会被java虚拟机销毁
异常处理
异常的概述
异常是Java提供的一种识别及响应错误的一致性机制。 异常指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。 在有效使用异常的情况下,异常能清晰的回答 what, where, why 这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出。
异常的抛出与捕捉
抛出异常
检测到错误的程序可以创建一个合适的异常类型的实例并抛出它,这就称为抛出一个异常(throwing an exception)。这里有一个例子,假如程序发现传递给方法的参数与方法的合约不符(例如,方法中的参数必须是非负的,但是传入的是一个负参数),这个程序就可以创建 IllegalArgumentException 的一个实例并抛出它<br>
捕捉异常
现在我们知道了如何声明一个异常以及如何抛出一个异常。当抛出一个异常时,可以在try-catch 块中捕获和处理它;<br>try-catch-finally
抛出异常
如果某个方法可能会产生异常,但不想在当前方法中处理这个异常,则可以使用throws和throw关键字在方法中抛出异常。
使用throws关键字抛出异常
Java异常有Runtime(运行时异常)和Checked(编译时异常),其中,所有RuntimeException类及其子类的实例被称为Runtime异常,不是RuntimeException类及其子类的异常实例都被称为Checked异常。<br>
使用throw关键字抛出异常
hrow关键字虽然可以用于抛出Exception类中的子类异常,但更重要的用途是抛出自定义异常。
异常使用原则
1、不要过度使用异常,虽然通过异常可以增强代码健壮性,但是使用过多不必要的异常处理,会影响效率。<br>2、不要使用过于庞大的try-catch块,过于庞大,业务过于复杂,会增加try块中出现异常的几率,从而增加分析产生异常原因的难度。<br>3、避免使用catch(Exception e)如果所有异常都采用相同的处理方式,将导致无法对不同异常进行分类处理。<br>4、异常既可以使用try-catch处理,也可以使用throws关键字处理,根据实际情况来判断使用哪种方式,两种关键的点就是,使用try-catch发生错误之后可以不影响线程继续执行下面代码,而throws代码抛出异常,也就是不管他,发生异常线程直接终止。<br>5、如果父类抛出多个异常,则覆盖方法只能抛出和基类方法相同或者更少的异常,异常类也可以抛出该异常类的子类(切记是子类,否则编译报错)。<br><br>
字符串
sring类
String类即字符串类型,并不是Java的基本数据类型,但可以像基本数据类型一样使用,用双引号括起来进行声明
<br>
String(char a[],int offset,int length)提取字符数组offset开始提取字符的位置,length提取字符的长度。
<br>
连接字符串
连接多个字符串<br>使用“+”运算符可完成对多个字符串连接的功能。<br>
<br>
连接其他数据类型
<br>
获取字符串信息
获取字符串长度<br>使用String类的length()方法可获取声明的字符串对象的长度。<br>
字符串查找<br>String类提供了两种查找字符串的方法,即indexOf()与lastIndexOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或字符串。<br>(1)indexOf(String s)<br>查询字符串首次出现的索引。
获取指定索引位置的字符
获取指定索引位置的字符<br><br>使用charAt()方法可将指定索引处的字符返回。<br><br>语法如下: str.charAt(int index)<br><br>str:任意字符串。 index:整型值,用于指定要返回字符的下标。<br><br>
字符串操作
获取子字符串<br>
通过String类的substring()方法可对字符串进行截取。这些方法的共同点就是都利用字符串的下标进行截取,并应明确字符串下标是从0开始的。<br><br>(1)substring(int beginIndex)<br><br>
(2)substring(int beginIndex, int endIndex)<br>
去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格。<br><br>语法如下: str.trim()<br>
字符串替换
replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。<br><br>语法如下: str.replace(char oldChar,char newChar)<br><br>oldChar:要替换的字符或字符串。<br><br>newChar:用于替换原来字符串的内容。<br>
判断字符串的开始与结尾<br>
startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。<br><br>这两个方法的返回值都为boolean类型。<br>
判断字符串是否相等
判断字符串是否相等有equals()、equalsIgnoreCase()两种方法,而又有各自的规则,使用不好就会出错,所以一定要区分好什么时候用哪种方法。<br>
(1)equals()
(2)equalsIgnoreCase() 不区分大小写比较<br>
按字典顺序比较两个字符串
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将此String对象表示的字符序列与参数字符串所表示的字符序列进行比较。<br>
字母大小写转换<br>
字符串的toLowerCase()方法可将字符串中的所有字符从大写字母改写为小写字母,而toUpperCase()方法可将字符串中的小写字母改写为大写字母。
(1)toLowerCase()<br>
(2)toUpperCase<br>
字符串分割
split()方法根据指定的分割符对字符串进行分割,并将分割后的结果存放在字符串数组中<br>
(1)split(String str)<br>
(2)split(String str,int limit)
格式化字符串
String类的静态format()方法用于创建格式化的字符串。
(1)format(String format,object.......)<br>
日期和时间字符串格式化<br><br>
日期和时间字符串格式化<br><br>
正则表达式<br>
判断是否符合正则表达式的方法使用String类的matches()方法进行判断。<br><br>boolean matches(String regex)<br><br> regex:指定的正则表达式<br>
正则表达式的元字符<br>
正则表达式的限定符
方括号中元字符的含义<br><br>
字符串生成器<br>
StringBuilder类<br>
StringBuilder类,即字符串生成器,新创建的StringBuilder对象初始容量是16个字符,可以自行指定初始长度,也可以动态地执行添加、删除和插入等字符串的编辑操作,大大提高了频繁增加字符串的效率。
StringBuilder类的常用方法
StringBuilder类的构造方法有很多,主要是参数上的区别,这里我们主要介绍几种在编程中经常会用到的方法。
(1)StringBuilder append(String str)方法
(2)StringBuilder append(StringBuffer sb)方法<br>
(3)StringBuilder insert(int offset, String str) 方法<br>
(4)StringBuilder delete(int start, String end)方法<br>
常用类库
StringBuffer类(重点)
String类的特点:<br><br> · String类的对象有两种实例化方式,一种是直接赋值,只会开辟一块堆内存空间,而且对象可以自动入池,另外一种方式使用构造方法完成,会开辟两块空间,有一块空间将成为垃圾,并且不会自动入池,但是可以通过intern()方法手工入池;<br><br> · 字符串常量一旦声明则不可改变,而字符串对象可以改变,但是改变的是其内存地址的指向;<br><br>通过以上的几个特点就可以清楚的发现,String类是表示字符串使用最多的类,但是其不适合于被频繁修改的字符串操作上,所以在这种情况下,往往可以使用StringBuffer类,即:StringBuffer类方便用户进行内容的修改。在String类之中使用“+”作为数据库的连接操作,而在StringBuffer类之中使用append()方法进行数据的连接。<br><br>范例:使用StringBuffer操作,StringBuffer的内容可以改变<br>
StringBuffer类在日后主要用于频繁修改字符串的操作上,但是在任何的开发之中,面对字符串的操作,98%都先考虑String,只有那2%会考虑StringBuffer。<br><br>现在表示字符串的操作类就有了两个:String、StringBuffer,那么通过这两个类的定义来研究一下关系看上面图。<br>
现在发现String和StringBuffer类都实现了一个CharSequence接口,日后一定要记住,如果看见了CharSequence最简单的理解做法就是传字符串,但是虽然这两个类是同一个接口的子类,不过这两个类对象之间却不能互相直接转型。<br>
将String变为StringBuffer
方法一:直接利用StringBuffer类的构造方法,public StringBuffer(String str)<br>
方法二:利用StringBuffer类的append()方法
将StringBuffer变为String,利用StringBuffer类的toString()方法完成<br>
Runtime类
在每一个JVM进程之中,都会存在一个运行时的操作类的对象,而这对象所属的类型就是Runtime类。打开这个类的文档可以发现,在这个类之中并没有构造方法定义,可是按照之前所学,每个类至少有一个构造方法,而这个类的构造方法实际上存在只是不被外部看见而已,因为构造方法被私有化了,这是一个标准的单例设计模式,既然是单例设计模式则在这个类就一定会存在一个static型的方法,可以取得本类的实例化对象:public static Runtime getRuntime()。<br><br>而当取得了这个类的实例化对象之后,可以利用这个类取得一些JVM的信息,例如:<br><br> · 取得最大可用内存:public long maxMemory();<br><br> · 总共可以使用的内存:public long totalMemory();<br><br> · 空闲的内存:public long freeMemory()。<br><br>
System类<br>
System类一直很熟悉,从未被了解,从最早的系统输出,后来的数组拷贝都属于System类的操作,下面来看一下数组排序的方法定义:<br><br>· 之前的格式:System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,长度) ;<br><br>· System类定义:public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)。<br><br>在System类之中有一个取得当前日期时间的方法:public static long currentTimeMillis()。<br><br>
随机数类:Random
java.util.Random的主要目的是产生随机数,下面直接通过一个代码来观察就行<br>
数学公式类:Math<br>
在java.lang.Math类之中定义了所有的与数学有关的基本公式,在这个类之中所有的方法都是static型的方法,而在这个类只强调一个方法:round(),public static long round(double a),表示四舍五入。<br>
大数字操作类<br>
如果说现在有两个非常大的数字要进行数学操作,你们认为该怎么做?这个时候数字已经超过了double的范围,那么只能利用字符串来表示,取出每一位字符变为数字后进行数学计算,但是这种方式的难度较高,为了解决这样的问题,在Java里面提供了两个大数字操作类:java.math.BigInteger、java.math.BigDecimal,而这两个类是属于Number的子类。<br><br>
大整数操作类:BigInteger<br>
之前已经强调过了,如果数字较大,肯定按照String来处理,所以这一点可以通过BigInteger的构造方法来观察:<br><br> · 构造:public BigInteger(String val);<br><br>而且在BigInteger类之中定义了一些基本的数学计算:<br><br> · 加法:public BigInteger add(BigInteger val);<br><br> · 减法:public BigInteger subtract(BigInteger val);<br><br> · 乘法:public BigInteger multiply(BigInteger val);<br><br> · 除法(不保存余数):public BigInteger divide(BigInteger val);<br><br> · 除法(保存余数):public BigInteger[] divideAndRemainder(BigInteger val),数组第一个元素是商,第二个元素是余数;<br><br>
大小数操作类:BigDecimal<br>
BigDecimal类表示的是大小数操作类,但是这个类也具备了与之前同样的基本计算方式,而在实际的工作之中,使用这个类最多的情况是进行准确位数的四舍五入操作,如果要完成这一操作需要关心BigDecimal类中的以下定义:<br><br> · 构造:public BigDecimal(double val);<br><br> · 除法:public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode);<br><br> · 进位模式:public static final int ROUND_HALF_UP。<br><br>
自由主题
收藏
0 条评论
下一页