java从入门到精通
2023-06-09 20:31:29 3 举报
AI智能生成
入门到精通
作者其他创作
大纲/内容
初识Java
Java简介
Java是一种通过解释方式来执行的语言
Java语言特性
简单,面向对象,分布性,可移植性,解释性,安全性,健壮性多线程,高能行,动态
搭建Java环境
解压缩,环境变量
熟悉eclipse开发工具
熟悉eclipse
创建项目
建一个类
使用ecplipse<br>
命名项目名称,然后选择javase-11,最后单击finish,之后在window-hello-src下删除src。<br><br>第四步选择window,选择hello-src-new-class创建helloworld,选择lnherited abstract,ranhou 选择finish<br><br>第五步输入system.out.print("我用eclipse写的第一个Java程序“);最下方则会出现输出结果<br>
Java语言基础
Java主类结构
含有main方法
基本数据类型
byte be = 1; //定义一个byte类型的变量,内存占用 1 个字节,取值范围:-2的7次方 ~ +2的7次方减一<br>short st = 1; //定义一个short类型的变量,内存占用 2 个字节,取值范围:-2的15次方 ~ +2的15次方减一<br>int it = 1; //定义一个int类型的变量,内存占用 4 个字节,取值范围:-2的31次方 ~ +2的31次方减一<br>long lg = 1L; //定义一个long类型的变量,内存占用 8 个字节,取值范围:-2的63次方 ~ +2的63次方减一<br>
浮点类型简称浮点型,用于存储含有小数的数值,Java中浮点类型分为两种,单精度(float)与双精度(double),两种浮点类型拥有不同的取值范围。<br>
字符类型<br>字符型可存储不同的字符,但只能存储单个字符,并用单引号括起来<br>
布尔类型的变量只能存储 真(true)与假(false) 两种值,只占1个bit位,Boolean类型变量默认值位false。<br>
变量与常量
关键字<br>关键字又称保留字,是Java语言中已经被赋予特定意义的一些单词,不可以把这些单词作为变量名等标识符来使用。<br>
变量<br><br>变量的声明与定义其实在之前的基本数据类型中已经讲过了,这里就不重复叙述了,说点重要的。<br>
在程序运行的过程中不会改变的数据称为常量。常量使用 fianl 关键字进行修饰<br>常量的定义:fianl 数据类型 变量名 = 数据值;,常量在定义的时候必须赋初值。<br><br>常量的常量名一般使用大写字母<br>注意!常量在定义并赋初值后,在程序运行后不能改变常量的数据值。<br>
运算符
位运算符<br>数据在计算机内的存储方式是二进位存储的,二进制在计算机内表示方式是一些按一定的排列规定进行排列在一起的数字0和数字1,例如:十进制10在计算机内表示是:0000 1010 (仅展示低八位),而位运算符就是可以对数据的每一位二进制数进行一定操作的运算符。<br>
三元运算符<br>前面我们介绍的运算符都是二元操作符与一元操作符,但Java还提供了一个三元操作符供我们使用。
数据类型转换
在编写程序的过程用,我们可能需要使用到不同数据类型的变量,以应对不同的需求,而有时候我们会对不同的数据类型进行运算、赋值的时候,我们就需要进行类型转换了。
流程控制
复合语句
复合语句从{ 开始 }结束
条件语句
条件语句<br>条件语句是根据不同的条件而执行不同的语句,从而产生不同的结果<br><br>
循环语句
当需要某一个特定的代码在程序中重复执行时,在之前我们可以复制那段需要重复的代码,然后需要执行多少次,我们就复制多少次,虽然效果能达到,但大大提高了程序的简洁度。现在,Java提供了几种循环语句,来使得重新操作变为简单.<br>
循环控制
在执行了循环操作后,有时根据不同的需求,在符合特定的条件时,需要对循环进行不同的操作。Java提供了两种控制循环的关键字:break、continue。
数组
一维数组
一维数组实际上是一组相同类型数据的线性集合
在Java中数组作为对象允许使用new关键字进行内存分配。<br><br>在创建一维数组时,需要先声明再进行内存的分配。
1、数组元素类型 数组名[]; 例如;int array1[];<br>2、数组元素类型[] 数组名; 例如;int[] array2;<br>
二维数组<br>
2、二维数组的使用<br>在二维数组中,对数组的每个元素继续访问的方法也是通过效果,对于下标的范围是与一维数组一样的,
数组基本操作
.sort(object)<br>数组元素排序方法<br><br>Arrays.sort(数组名);<br>
2.binarySearch(Object[ ] a,Object key)<br>在a数组中查询key的下标位置,并且返回该下标。<br>
3.指定区间内查询<br>左闭右开区间,查找的返回包括前索引,但是不包括后索引。<br><br>目标值下标=Arrays.binarySearch(数组名,前索引,后索引,元素);<br>
数组排序算法
4.冒泡排序<br>冒泡算法由双层循环实现,其中外层循环用于控制排序轮数<br>
5.直接排序<br>循环将最大的数放到最后,固定不动,第二次再将最大的数放到最后,固定不动,往后继续。
6.反转排序<br>简称倒排,将数组中的元素倒序一遍。<br>
类和对象
类
前面已经简略介绍过对象的概念了,对象是类的实例化,而类是对象的载体。<br>那么以下我们来总结一下,一个类中的组成。
在Java中,对象的属性就是成员变量的方式存在的。其实成员变量就是普通的变量,只不过用来表示了类的属性。在创建成员变量时,可以为成员变量设定初始值,如果设定初值的话,会有默认值。如果在创建成员变量时,给定了默认值,那么在本类创建的所有对象,在没有修改这个成员变量的值前,所有对象的成员变量都是这个给定值。<br><br>
在Java中使用成员方法来对应类对象的行为。以上述的Book类为例。<br>它包含了两个成员方法,一个是设置图书的名称,一个是获取图书的名称<br>
权限修饰符<br>
类的构造方法
类的构造方法<br>在类中,除了成员方法之外,还有一类特殊的方法,就是构造方法。构造方法是一种于类同名的方法。<br>在一个类创建对象时,虚拟机会根据形参,自动调用构造方法,来初始化对象。<br><br>构造方法没有返回值,且构造方法的名称要与本类同名。同时满足这两点才是一个构造方法。<br><br><br>无参构造与有参构造<br><br>这里的有参与无参,指的是有无形参。<br>public class Book{<br> private String name;<br><br> //无参构造<br> public Book(){<br> }<br> //有参构造<br> public Book(String Name){<br> this.name=Name;}<br> }<br>特别注意:无参构造不需要我们自行编写,虚拟机会自动加上,但是如果我们编写了有参构造的话,那么此时虚拟机不会自行添加无参构造,需要我们自行编写。<br>
静态变量和静态方法
使用static关键字修饰的方法或者变量称为静态的。<br>被static修饰的变量与方法,地址被放置于静态区内,在类文件执行时,会自动调用这块区域,且只会执行一次。<br>1<br>2<br>静态方法与变量可以直接使用 类名.静态成员 的方式调用。<br>
静态关键字使用注意点<br><br>在静态方法中不可能使用this关键字<br>静态方法只能调用静态方法,非静态方法调用所有<br>局部变量不可以使用static关键字声明<br>主方法必须使用static声明<br>所有类,只有内部类可以使用static关键字声明<br>
类的主方法
main
对象
在Java中使用new操作符,调用构造方法创建对象。<br>如果有多个构造方法,new 操作符会根据构造方法传入的形参来自动调用相应的构造方法。<br>
继承多态抽象类与接口
类的继承
类的继承<br><br>继承关系的定义<br><br>继承在人类个体之间说的是物质的继承,那么在Java中类与类之间的继承也类似于此,类在继承关系中分为两种,一种是父类,属于是被继承类,一种是子类,属于是继承类,如果某一个类继承了另一个类,那么该类就是子类,被继承的类就是父类。<br><br><br>Java中一个类继承另一个类,需要使用到关键字extends。<br>使用格式如下<br>
class Child extends Parent(){ //类Child 继承于类 Parent<br>}<br>
注意,在Java中只支持单继承,一个子类只能拥有一个父类,但是一个父类可以拥有多个子类。不允许多继承,但是允许多重继承。<br><br>
继承关系的好处<br><br>在两个类的关系呈包含与被包含的关系时,使用关键字形成继承关系之后,那么子类就可以直接使用父类中已经创建好的属性与方法,减少重复的代码段,提高代码的复用性。<br><br>例如:子类对象调用父类方法.,子类继承父类后,在创建子类对象的同时,会先调用父类的构造方法。<br>
object类
对象的类型转换
对象类型的转换<br>需要注意的是,只有具备继承关系得类与类之间才能进行对象类型转换,非继承关系之间不能进行类型转换。<br><br>对象之间的类型转换在Java编程中还是很常见的。类型转换分为向上转型与向下转型。<br>而向上转型就是将子类对象赋值给父类对象。<br>格式为: 父类 对象名 = (父类) 子类对象;<br>需要注意得是,在进行向上类型转换后,父类对象依旧无法调用子类独有的属性与方法。<br>只能调用从父类中继承下来的属性与方法。<br>所有向上类型转换一般不怎么使用,这里就不多叙述了。<br><br>向下类型转换<br><br>向下类型转换可以理解为将父类类型的对象转换为子类类型的对象。<br>但是运用向下转型,因为父类大多是较为抽象的类,而子类大多是具体的类,<br>而将一个较为抽象的类转换为一个较为具体的类,这样的转换通常会出现错误,所以向下转型是不安全的。<br><br><br>在进行向下转型时,需要借助强制类型转换。<br>
使用instanceof关键字判断对象类型
instanceof关键字<br>instanceof是Java的关键字,用于判断某个对象是否属于某个类的。<br>真则返回true,假则返回false。<br><br>格式:实例化对象 instanceof 某个类<br><br>如果一个方法的形参定义为 在一段继承关系中的父类 (父类是可以接收子类对象),也就是说这个方法可以接收子类对象,也可以接收父类对象,那么该方法需要针对不同的对象来进行不同的操作的话,这个时候就需要使用到 instanceof 关键字了<br>
final关键字
final关键字<br>final关键字也称静态关键字,在之前的变量章节也已经提到过了。<br>被final关键字修饰的变量在代码运行过程中无改变其数据值,也就是变成的常量,无法改变的量。<br>关于final关键字用为变量的修饰,这里就不重复叙述了。<br><br>final方法<br><br>被定义为final类型的方法,在被继承后,子类无法重写该方法,无法重写但是可以使用。<br>前面提到的权限修饰符private,私有的,被这个修饰符修饰的属性与方法在继承后,子类无法继承该属<br>
多态
多态<br>有继承关系的类与类之间才有多态的概念。<br><br>多态就是就是子类的向上转型,子类向上转型前面也已经说过了,这里就不多复述了。<br>使用多态能够大量的减少程序冗余的程度,多态通常是定义为某个方法的形参,针对传入参数的实例不同,使用不同的功能,与instanceof关键字配套使用。<br>
抽象类与接口
<br>
<br>
包和内部类
java类包<br>
类包<br><br>在Java中,我们可以使用class关键字来进行定义一个类,在程序被编译后就会产生一个.class文件。类的定义是规定类名不能重复的,如果程序内只定义了少量的类,那自然不用担心这个问题。<br>但是,随着类的数量增多,那么难免会出现这个问题,如果根据需求需要定义两个名字相同但是程序逻辑不同的类时,那么该如何解决呢,最好的方法就是将这个两个类放置在不同的包下面。<br><br><br>类的定义规定,在同一个类包下面不允许出来同名的类,但是在不同类包下面就允许出现这种情况,相当于将两个同名的类放入了不同的盒子内,避免出现这个问题。<br>
内部类
内部类<br><br>内部类顾名思义,就定义在一个类内部的类。<br><br>
成员内部类<br>定义在一个类成员位置的内部类,称为成员内部类,在成员内部类中可以使用外部类的的任意成员变量与成员方法,即使该外部类成员变量被private所修饰。<br><br>package test;<br><br>public class Demo_4 {<br> private int num;<br> static int i=0;<br> <br> // 内部类<br> class test{<br> public void show(){<br> // 内部类调用外部类的成员变量<br> System.out.println(num);<br> System.out.println(i);<br> }<br> }<br>}<br>
因为private等权限修饰符是针对外界的调用而进行权限判断的,但是成员内部类定义在该类的内部,那么相对于该类的一部分,就像该类的方法也是可以调用被private修饰的成员变量一般,成员内部类属于外部类的成员之一。<br><br>内部类是依赖于外部类的存在而存在。除非程序中已经有了一个外部类的对象,否则内部类一般不会单独存在。<br><br><br>内部类也可以被权限修饰符进行修饰,如果内部类被private修饰,那么外界无法创建内部类的对象,只能在外部类中创建内部类的对象。<br><br><br>该如何获取内部类的对象呢?<br><br>两种方法:<br><br>对外部类编写get方法,对外提供内部类的对象<br>如果内部类没有被private修饰,那么可以在外界创建一个内部类的对象;<br><br>方法二:直接创建内部类对象<br><br>成员内部类创建对象格式:<br><br>外部类.内部类 类名 = 外部类对象.new 内部类构造方法();方法一:通过get方法对外提供成员内部类对象<br>这个方法多用于成员内部类被private修饰时,才使用这个方法。<br><br>但是如果成员内部类被private修饰了,那么外界也无法使用成员内部类的变量来接收这个返回值,只能使用多态的方式,让成员内部类的父类进行接收,如果该成员内部类没有继承其它类,那么只能使用Object来接收这个返回值<br><br>
外部类与内部类之间也可使用this关键字,如果在内部类中需要使用到外部类的成员变量,那么可以使用外部类.this.变量名的方式使用。
匿名内部类<br>匿名内部类本质是一个隐藏了名字的内部类。匿名类是只有在创建时才会编写类体的一种写法。<br><br>语法格式:<br><br>new 继承/实现(){<br> //重写的方法<br>};匿名内部类在一对大括号 { } 的范围内是一个类,整体却是一个new出来的对象。<br><br>
异常处理
异常地抛出和捕捉
异常的捕捉<br>Java的异常捕获结构由try、catch和finally3部分组成。<br><br>
java常见的异常类
自定义异常
自定义异常类<br><br>虽然Java提供了很多的异常类供我们使用,但是如果有一个user的类,类中有一个属性是name,要求这个name需要用户自己输入,并且name的长度需要大于2-小于10,否则抛出一个异常进行处理。那么这个异常该使用那个异常类呢?好像在Java提供的异常类中,没有对应的异常类能够很好的表示出来。<br><br>这个时候就需要编写者自己定义一个异常类来使用了。<br>
在方法中抛出异常
<br>
运行时异常
字符串
String类
创建字符串<br><br>String类型变量: 由于在Java中,字符串是使用String类的对象来实现的,类的创建是需要使用到new操作符的,所以字符串的创建也是需要使用到new操作符的。<br><br> String str; // 这里定义了一个String类的对象<br> String str2=new String("123456"); // 这里是创建了一个String类的变量并赋值<br>1<br>2<br>但是有的时候,对于String类的对象直接赋值为字符串:<br><br>String str="abcd";<br>1<br>但也是没有问题的,但这并没有使用到new操作符。这是因为存储的内存区不同。<br>
连接字符串
链接字符串<br>使用”+“运算符可实现连接对各字符串的功能。使用多个+号,可以连接多个字符串。<br>只要 ”+“ 运算符的一个操作数是字符串,那么编译器就会自动将另一个操作数也转换成字符串形式。<br><br><br>示例:<br><br>String a="9";<br>String b=a+1;<br>System.out.println(b); // 输出结果为:91<br>1<br>2<br>3<br>上述示例会先将数值1 转换为字符串"1",然后再将字符串“9”和字符串“1” ,按照顺序拼接起来,形成一个新的字符串,底层是通过调用StringBuilder类的append方法实现的。<br>
获取字符串信息
获取指定字符<br><br>String类对外提供charAt方法来获取字符串指定下标的字符。<br>由于字符串也是由数组实现的,所以字符串的下标也是从0开始到 length-1之间。<br><br>格式:String类对象.charAt(需要获取的下标字符);<br>1<br>String类charAt方法源码:<br>
字符串操作
获取长度<br>String类是使用char类型数组来存储数据的,所以我们也可以获取字符串的长度,也就是数组的长度。<br>
格式化字符串
格式化字串<br>String类的静态format()方法用于创建格式化字符串。<br><br>该方法有两种重载形式。<br><br><br>指定语言环境的方法,字符串被格式化后会使用其指定的语言环境。<br><br>日期和时间字符串格式化的话,由于涉及的方法在后期的学习才会涉及到,所以这里就不多叙述了,没学过的话也讲不好毕竟。<br>
使用正则表达式
字符串生成器
<br>
常用类库
包装类
包装类<br><br>在前一章的字符串章节中,可以把字符串当作对象来进行处理,衍生出了许多灵活的操作,更让我们能使用非常多的方法对字符串的操作,让变得异常灵活。<br><br><br>但是在Java中,基础类型并不是类,并不能定义基础类型的变量,使得对基础类型的操作也能很方便。这个时候包装类就出现了,它主要的作用就是将基本类型封装在包装类中,这样就是方便的把这些基本数据类型转换成对象进行处理了。<br><br>
数字处理
<br>
system类
打印类
scanner类
键盘录入<br>
日期时间类
日期时间类<br>在程序开发中,日期与时间的获取也是非常的普遍的,例如根据业务需求,需要制作一个零点秒杀活动,此时准确的获取时间是一定的。所以Java中也提供了专门的日期时间类来处理相应的问题。<br><br>
runtime类
<br>
收藏
0 条评论
下一页