java从入门到精通
2023-06-09 10:33:25 14 举报
AI智能生成
java思维导图
作者其他创作
大纲/内容
熟悉eclipse开发工具
熟悉eclipse
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。子主题
使用eclipse
创建java项目
创建java类文件
使用编辑器编写代码
运行java开发程序
java语言基础
java主类结构
基本数据类型
基本数据类型
数值型
整数类型(byte,short,int,long)
浮点类型(float,double)
字符型(char)
布尔类型(boolean)
引用数据类型
类(class)
接口(interface)
数组
变量与常量
变量
变量是Java程序中的基本存储单元,它的定义主要包括变量名、变量类型和变量的作用域三个部分。
变量名:
是一个合法的标识符。
Java对变量名区分大小写,变量名不能以数字开头,而且不能为保留字。
变量名应具有一定的含义,以增加程序的可读性。
变量类型:可以为任意的一种数据类型。
变量的作用域:
变量可以被访问到的范围。
只有在作用域范围内变量才可以被使用。
按作用域来分,变量可以分为:局部变量、全局变量、类变量及方法参数变量。
全局变量可以在整个文件甚至整个程序中都能被访问到。
局部变量在方法或方法代码中声明的变量,作用域为它所在的代码块(整个方法或方法中的某块代码)。
类变量在类中声明,而不是在类的某个方法中声明,它的作用域是整个类。
方法参数的作用域就是当前方法,与局部变量类似。
变量是Java程序中的基本存储单元,它的定义主要包括变量名、变量类型和变量的作用域三个部分。
变量名:
是一个合法的标识符。
Java对变量名区分大小写,变量名不能以数字开头,而且不能为保留字。
变量名应具有一定的含义,以增加程序的可读性。
变量类型:可以为任意的一种数据类型。
变量的作用域:
变量可以被访问到的范围。
只有在作用域范围内变量才可以被使用。
按作用域来分,变量可以分为:局部变量、全局变量、类变量及方法参数变量。
全局变量可以在整个文件甚至整个程序中都能被访问到。
局部变量在方法或方法代码中声明的变量,作用域为它所在的代码块(整个方法或方法中的某块代码)。
类变量在类中声明,而不是在类的某个方法中声明,它的作用域是整个类。
方法参数的作用域就是当前方法,与局部变量类似。
常量
字符串常量:用双引号括起来的部分。例如“123”、“abc”
整型常量:直接写数字(没小数点)。例如123、-123、0
浮点常量:有小数。例如2.5、-3.1、0.0
字符常量:单引号括起来的单个字符。例如‘A’、‘1’、‘你’、‘a’
布尔常量:只有true、false
空常量:null(没有任何数据)
字符串常量:用双引号括起来的部分。例如“123”、“abc”
整型常量:直接写数字(没小数点)。例如123、-123、0
浮点常量:有小数。例如2.5、-3.1、0.0
字符常量:单引号括起来的单个字符。例如‘A’、‘1’、‘你’、‘a’
布尔常量:只有true、false
空常量:null(没有任何数据)
运算符
四则运算
同数学符号
模%
并置
连接两个字符串
列子
“Hi”.“Ha”
//输出:HIHa
递增.递减
预
预递增
++x
x加1,然后回x
预递减
--++
x减1,然后返回x
后
后递增
x++
返回x,然后x加1
后递减
x--
返回x,然后x加1
比较运算符
==
等于,隐式类型转换
===
恒等于,类型相等,值相等
不等于
x!=1
x,<>y
x!==y
不恒等于
值不同,同时类型不同
大于,小于,大于等于,小于等于 同数学符号
运算逻辑符
与
xandy
x&&y
或
x ory
x lly
非
!x
异域
xxory
x和y有且仅有一个为true
数组运算符
x+y
x和y的集合
x==y
如果x和y具有相同的键/值对,则返回ture
x==y
x和y具有相同的键/值对
且顺序相同类型相同
不相等
x!==y
x<>y
x!=y
三元运算符
语法
(expr1)?(expr2):(expr3)
对expr1求值为TRUE时的值为expr2
在expr1求值为FALSE时的值为expr3
PHP5之后
expr1?:expr3
省略三元运算符中间那部分
在expr1求值为TRUE时返回expr1,否则返回expr3
列子
php+版本多了一个NULL合并运算符
组合比较符(PHP+7)
整形
echo1<=>1;//0
echo 1<=>2;//-1
echo2<=>1;//1
浮点型
echo1.5<=>1.5;//0
echo1.5<=>2.5;//-1
echo2.5><=>1.5;//1
字符串
echo"a"<=>"a";//0
echo"a"<=>b;//-1
echo"b"<=>"a";//1
数据类型转换
隐式类型转换
隐式类型转换也叫做自动类型转换。1、规则:
从存储范围小的类型到存储范围大的类型。
2、转换方向:
byte→short(char)→int→long→float→double(这里指的是只有前面的数据类型能随便转换成后面的)
—实际开发中这样的类型转换很多,但没有为这种转换提供专门的语法,都是由虚拟机自动完成。
从存储范围小的类型到存储范围大的类型。
2、转换方向:
byte→short(char)→int→long→float→double(这里指的是只有前面的数据类型能随便转换成后面的)
—实际开发中这样的类型转换很多,但没有为这种转换提供专门的语法,都是由虚拟机自动完成。
显示类型转换
显式类型转换也叫做强制类型转换。
1、规则:
从存储范围大的类型到存储范围小的类型。2、转换方向:
double→float→long→int→short(char)→byte
强制类型转换通常都会存储精度的损失,所以使用时需要谨慎。
—需要在被转换值的前面添加个括号,括号里面写的是希望得到的数据类型
1、规则:
从存储范围大的类型到存储范围小的类型。2、转换方向:
double→float→long→int→short(char)→byte
强制类型转换通常都会存储精度的损失,所以使用时需要谨慎。
—需要在被转换值的前面添加个括号,括号里面写的是希望得到的数据类型
代码注释与编码规范
单行注释
”//“为单行注释标记,从符号”//“开始直到换行为止所有内容均作为注释而被编译器忽略。
多行注释
“/* "和”*/"为多行注释标记,符号之间所有内容均为注释内容,注释内容可换行
文档注释
“/** */"为文档注释标记,符号之间的所有内容均为文档注释内容
编码规范
1每条语句要单独占一行,一条命令一分号结束。
2声明变量时尽量使每个变量的声明单独占一行,即使相同也单行放置。
3在java代码中关键字与关键字之间若有多个空格,均被视为一个。
4尽量使用简单的技术完成程序需要的功能。
2声明变量时尽量使每个变量的声明单独占一行,即使相同也单行放置。
3在java代码中关键字与关键字之间若有多个空格,均被视为一个。
4尽量使用简单的技术完成程序需要的功能。
流程控制
复合语句
复合语句以整个块为单位,可以用在任何一个单独语句可以用到的地方,并且在复合语句中还可以嵌套复合语句.
if(布尔表达式)
if(布尔表达式)
条件语句
if...else语句
先判断条件,条件满足后才执行的情况
多重if:当需要判断的条件是连续的区间时,从该位置开始向下执行,直到遇到break语句或者switch语句块结束;如果没有匹配的case语句执行defauit块的代码。
switch
当switch后表达式的值和case语句后的值相同时,从该位置开始向下执行,直到遇到break语句或者switch语句块结束:如果没有匹配的case语句则执行default块的代码。
1,switch后面的小括号中表达式的值必须是整形或者字符型
2,case后面的值可以是常量数值,列如1,2,;也可以是一个常量表达式,如2+2;但不能是变量或者带有变量的表达式,如a*2
3,case匹配后,执行匹配块里的程序代码,如果没遇见break会继续执行下一个的case块的内容,直到没有遇到break语句或者switch语句块结束。
4,可以把功能相同的case语句合并起来
2,case后面的值可以是常量数值,列如1,2,;也可以是一个常量表达式,如2+2;但不能是变量或者带有变量的表达式,如a*2
3,case匹配后,执行匹配块里的程序代码,如果没遇见break会继续执行下一个的case块的内容,直到没有遇到break语句或者switch语句块结束。
4,可以把功能相同的case语句合并起来
5,default块可以出现在任意位置,也可以省略
循环语句
特点:相比while和do···while语句结构更加简洁易读。
1,for关键字后面括号中的三个表达式必须用“,”隔开,三个表达式都可以省略,但“,”不能省略。a省略“循环变量初始化”可以在for语句之前由赋值语句进行变量初始化操作。
2,for循环变量初始化和循环变量变化部分,可以使用“,”同时初始化或改变多个循环变量的值“for(int i=0,j=0;i<5;i++,j++){}
3,循环条件部分可以使用逻辑运算符组合的表达式,表示复杂判断条件,但一定注意运算的优先等级。
循环控制
break和continue
break是结束整个循环体,continue是结束单次循环
continue是结束单次循环
数组
一维数组
数组的声明和赋值
先声明,再分配空间——数据类型【】数组名;=new数据类型{长度}
声明分配空间——数据类型【】数组名=new数据类型{长度}
声明并赋值(繁)——数据类型【】数组名=new数据类型【】{value1,value2,...}
声明并赋值(简)——数据类型【】和数组名={value1,value2...}
二维数组
赋值————高维数组中的每一个元素,保存了低维数组的地址。访问array【下标】等价于在访问此数组的地址
访问————低维长度——array(0).length首个低维数组的长度
访问————低维数组元素——array(0)(0)首个低维数组的首个元素
数组排序算法
冒泡排序法——相邻的两个数值比较大小,互换位置
选择排序法——固定值与其他值依次比较大小,互换位置
反转排序法——数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,依此类推,直到把所有数组元素反转替换。
类和对象
类的构造方法
构造方法的作用
1.构造方法必须是类名,用于供给new关键字使用,明确当前实列化/创建的对象对应什么数据类型
2.构造方法有且只有【初始化】new关键字+构造方法 实列化创建 对象数据内容功能
无参构造——java编译器若是发现当前类没有构造方法,会自动提供一个无参构造方法供程序员使用
有参构造
构造方法格式——public类名(必要参数)(成员变量赋值语句)
静态变量和静态方法
静态方法——(或称为类方法),指被 static 修饰的成员方法。
静态变量——在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量
类的主方法
主方法也是静态的,所以如要直接在主方法中调用其他方法,则该方法必须是静态的。
主方法没有返回值。
主方法的形参为数组,其中args[0]~args[n]分别代表程序的第一个参数到n个参数,可以使用args.length获取参数的个数。
主方法没有返回值。
主方法的形参为数组,其中args[0]~args[n]分别代表程序的第一个参数到n个参数,可以使用args.length获取参数的个数。
对象
拥有多个特征和行为的实体,对象是类的实例
继承多态类接口
类的继承
在子类中,可直接访问从父类继承到的属性和方法,但如果父类的属性或方法存在重名(属性遮蔽、方法覆盖)时,需要加以区分,才可专项访问用法:使用 super. 的形式访问父类的方法 进而完成在子类中的复用 ,再叠加额外的功能代码,组成新的功能super的访问属性 :父子类的同名属性不存在覆盖关系,两个空间同时存在(子类遮蔽父类属性)需使用不同前缀进行访问super调用父类无参构造super()表示调用父类无参构造方法。如果没有显示书写。 隐式存在于子类构造方法的首行
Object类
常用的几种方法
toString方法
toString():取得对象信息,返回该对象的字符串表示
toString():取得对象信息,返回该对象的字符串表示
equals方法 ——比较对象的内容是否相等
对象类型的转换
向上转型——把子类对象直接赋给父类引用,不用强制转换
向下转型——子类对象指向父类引用为向下转型。fatherClass 是父类名称,obj 是创建的对象,sonClass 是子类名称。
方法的重载
重载:一个类中定义多个相同的名称的方法
要求:方法名称相同 参数列表不同(类型、个数、顺序) 与返回修饰符,返回值类型无关
调用带有重载方法时,需要根据传入的实参方法去找到与之匹配的方法
好处:屏蔽使用差异,灵活、方便
要求:方法名称相同 参数列表不同(类型、个数、顺序) 与返回修饰符,返回值类型无关
调用带有重载方法时,需要根据传入的实参方法去找到与之匹配的方法
好处:屏蔽使用差异,灵活、方便
final关键字
用法
1. 可以用来修饰一个类
2. 可以用来修饰一个方法
3. 还可以用来修饰一个局部变量
4. 还可以用来修饰一个成员变量
2. 可以用来修饰一个方法
3. 还可以用来修饰一个局部变量
4. 还可以用来修饰一个成员变量
修饰方法
当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。
修饰符 final 返回值类型 方法名称(参数列表) {
// 方法体
}
// 方法体
}
多态
在多态中,编译看左边,运行看右边
体现形式
继承 父类可以是抽象类,也可以是普通类
具有灵活性,可扩充性,可替换性
重写
抽象类与接口
抽象类
抽象类的概念————抽象类用来描述一些具有通用概念的类,用abstract修饰类
抽象类的特性
1.抽线类不能实列化,但是可以创建一个继承该抽象类的匿名内部类对象,该匿名内部类也要将抽象类中的所有抽象方法实现;new抽象类名()
2.抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
3.抽象类只能做父类,供其他类继承,不能用final修饰
4.一个类如果继承一个抽象类
1.实现抽象类中所有的抽象方法
2.否则该类仍为抽象类
5.抽象类中可以有构造方法和静态方法,但是静态方法和构造方法不能是抽象的
6.抽象类可以定义变量
7‘可以通过多态将匿名内部类对象定义为抽象类型
8.创建子类对象的时候,会隐式调用抽象父类的构造方法
抽象方法
抽象方法是指用abstract修饰,并且只定义了方法头,而没有方法体和具体实现的方法,抽象方法只能存在于抽象类中,可以带参数。
抽象类与普通类区别
1.抽象类中可能有抽象方法,普通的类没有抽象方法
2.抽象类不能实列化,普通类的可以进行实列化
3.抽象类不能用final修饰,普通类可以
接口
接口的概念
接口是一种特殊形式的抽象类,表示某种或某些相关的行为或方法或能力
接口中所有的方法全部都是抽象的(目前可以理解,后面会补充,接口中还可以定义其他方法)
接口的特性
1.接口中不能有构造方法
2.接口中在jdk1.8之后是可以定义静态方法与默认方法的
3.接口中的方法默认是public static修饰的,可以不写public sbstract
4.接口中的默认变量是public static final修饰,即接口中中有静态变量没有变量
5.多态的第二种实现:将实现类对象定义为接口类型
6.多态后只能调用重写后的方法,不能调用实现类自己的方法,子类的属性也不能调用
接口之前常量的调用
直接通过接口实现类对象属性调用
通过创建匿名内部类对象,属性调用
包和类
java类包
包的名称:java。lang
类的名称:Math
内部和类
类的内部还有类,在类体里面定义一个类,这个类就是内部类,也叫成员内部类。
异常处理
异常概述
在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。
异常的抛出与捕捉
使用throws关键字抛出异常
返回值类型 方法名(参数)throws 异常类型名{
}
}
用throw关键字抛出异常
throw new 异常类型名(异常信息)
java常见的异常类
Java异常类有两种:1、Error异常 2、Exception异常。程序员通常只能处理Exception异常,而对Error异常无能为力。
自定义异常
首先写一个自定义异常,继承Exception
子主题
使用自定义异常
如果自定义异常是为了提示,在使用的时候,一定要用try..catch,不要直接用throw往外抛。
如果自定义异常是为了提示,在使用的时候,一定要用try..catch,不要直接用throw往外抛。
子主题
在方法中抛出异常
Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要使用人工创建并抛出。程序员也可以通过throw语句手动显式的抛出一个异常。throw语句的后面可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:
throw new String("你抛我试试.");
throw 语句必须写在函数中,执行throw 语句的地方就是一个异常抛出点,它和由JRE自动形成的异常抛出点没有任何差别。
throw new String("你抛我试试.");
throw 语句必须写在函数中,执行throw 语句的地方就是一个异常抛出点,它和由JRE自动形成的异常抛出点没有任何差别。
运行时异常
ArithmeticException
数学运算异常,比如除数为零的异常
数学运算异常,比如除数为零的异常
IndexOutOfBoundsException
下标越界异常,比如集合、数组等
下标越界异常,比如集合、数组等
ArrayIndexOutOfBoundsException
访问数组元素的下标越界异常
访问数组元素的下标越界异常
StringIndexOutOfBoundsException
字符串下标越界异常
字符串下标越界异常
ClassCaseException
类强制转换异常
类强制转换异常
NullpointerException
当程序试图访问一个空数组中的元素,或访问一个空对象中的方法或变量时产生的异常。
当程序试图访问一个空数组中的元素,或访问一个空对象中的方法或变量时产生的异常。
异常的使用原则
1、不要过度使用异常
2、不要使用过于庞大的try-catch块,过于庞大,业务过于复杂
3、避免使用catch(Exception e)如果所有异常都采用相同的处理方式,将导致无法对不同异常进行分类处理。
4、异常既可以使用try-catch处理,也可以使用throws关键字处理,根据实际情况来判断
如果父类抛出多个异常,则覆盖方法只能抛出和基类方法相同或者更少的异常,异常类也可以抛出该异常类的子类
字符串
String类
字符串变量必须赋值后才可以使用,这称为字符串对象初始化。
字符串的创建和赋值的方式有三种:
字符串的创建和赋值的方式有三种:
连接字符串
最常用对字符串进行的操作之一就是将两个字符串连接起来,合并为一个字符串。String类提供连接两个字符串的方法concat(),语法格式为:
string1.concat(string2);
获取字符串信息
length()方法是用来获取字符串长度的。它会返回字符串对象中所包含的字符的个数,例如:
public class myfirst {
public static void main(String[] args) {
String sayHello="Hello,Welcome to Java!!!";int length=sayHello.length();System.out.println(length);
public class myfirst {
public static void main(String[] args) {
String sayHello="Hello,Welcome to Java!!!";int length=sayHello.length();System.out.println(length);
字符串操作
获取字符串
去除空格
字符串替换
格式化字符串
格式化符号
- 将是左对齐的。(默认是右对齐),不可以与“用0填充”同时使用
# 如果是浮点数则结果加小数点,十六进制和八进制分别加0x和0只适用于8进制和16进制,8进制时在结果前面增加一个0,16进制时在结果前 面增加0x
+ 正数前显示正号,负数前显示负号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
空格 正数前显示空格,负号前显示负号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
0 结果将用零来填充
, 结果将包括特定于语言环境的组分隔符
( 结果将是用圆括号括起来的负数(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
< System.out.println(String.format("%d%<x", 10));10a
整数模型结构
格式化公式:%[index$][标识][最小宽度]转换方式
index$:指定是第几个参数
最小宽度:转换后的整数的最小位数
标识:标识可以有多个
index$:指定是第几个参数
最小宽度:转换后的整数的最小位数
标识:标识可以有多个
浮点数模型结构
浮点数的格式化公式比整数的多了一个精度,用于控制小数点后的位数。
格式化公式:%[index$][标识][最少宽度][.精度]转换方式
字符串模型结构
字符串格式化不能有标识,否则运行错误
字符串格式化不能有标识,否则运行错误
常用类库
包装类
1.lnteger类
2.Double类
3.Boolean类
4.Character类
5.Number类
2.Double类
3.Boolean类
4.Character类
5.Number类
数字处理
数字格式化:数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数字.数字格式化操作主要针对的是浮点型数据,包括 double 型和 flat 型数据。在 Java 中使用 java.text.DecimalFormat 格式化数字.
Math类:提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大值、最小值,以及平均值函数方法。这些方法都被定义为 statie 形式.
System类
1.控制输出字符:不会自动换行的print()方法:System.out.print("hello!"); 可以自动换行的println()方法:System.out.println("书籍是人类进步的阶梯!");
2.计时:System.currentTimeMillis0方法可以获取自1970年1月1日零点至今的毫秒数
Scanner类
Runtime类
说明及常用方法
执行本地命令: Runtime 类提供 exe0方法让 Java 代码可以执行系统的命令,exec0方法有很多重的形式.
查看内存: Runtime 类可以通过 freeMemory0方法查看当前Java虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张。
收藏
0 条评论
下一页