什么是计算机
computer,全称电子计算机,俗称电脑
能够按照程序运行,自动高速处理海量的现代化智能电子设备
由硬件和软件所组成
常见的形式有台式计算机,笔记本计算机,大型计算机。
广泛应用在:科学计算,数据处理,自动控制,计算机辅助设计,人工智能,网络等领域。
计算机硬件组成:
cpu
主板、内存
电源,主机io设备
芬诺伊曼体系结构
输入设备,存储器,输出设备,运算器,控制器
数据流,指令流,控制流–》冯诺依曼体系结构
计算机软件
计算机软件可以使计算机按照事先预定好的顺序完成特定的功能
计算机软件按照其功能画风为系统软件和应用人软件。
系统软件:dos,linux,unix,mac
应用软件:wps,qq,英雄联盟
人机交互(图形化界面,命令行)
电脑常用快捷键
键盘功能键:tab,shift.ctrl,alt,enter,window
全选,复制,粘贴,撤销,保存,关闭窗口,运行,永久删除
基本的dos命令
开启dos控制台
计算机语言发展史
机器语言
我们都知道计算机的基本计算方式都是基于二进制的方式
为了解决人类无法读懂机器语言的问题
指令代替二进制
目前应用:
逆向工程、
就机器人:
病毒
第三代语言
摩尔定律
当价格不变时,集成电路可容纳晶体管
高级语言:
、大体上分为L面向过程和面向对象两大语言
c语言是典型的面向过程的语言,c++。Java是典型的面向对象的语言
聊聊各种怨言:
c
语言:
c++语言
java语言
c#语言
python,php,javaScript
初始java,
c,c++,1972年c诞生,贴近硬件,运行极快,效率极高
操作系统,编译器,数据库,网络系统等
指针和内存管理
1982年c++
我们要建立一个新的语言
语法有点像c
没有指针
没有内存管理
真正的可移植性,编写一次,到处运行
面向对象
类型安全
、高质量的类库
1995年的我也简单而粗糙,缺乏互动性
图形界面的程序
javase:占领桌面
javame:占领手机
j2ee:占领服务器
构建工具:ant,maven,jekins
应用服务器:tomcat,jetty,jbos,websphere,weblogic
web:开发:struts,spring,hibernate,mybatis
开发工具:eclpe。nebean,inteli,idea,jbuilder
hadoop
abdroid(手机端)
java特性:
简单性;
面向对象;
可移植性
高新能,
分布式
动态性
多线程
安全性
健壮性
java三大版本
标准版,嵌入式,E企业级开发,web
段,服务器开发
jdk:jav DEVElopment kit
jre:
编译型:
解释性:
数组的概述
数组本身是引用数据类型,而数组中的元素可以是任何数据类型,摆阔基本数据类型和引用数据类型。
创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
数组的长度一旦确定,就不能修改。
我们可以直接通过下标或索引的法师调用指定位置的元素,速度很快。
数组的分类:
按照维度:一维数组,二维数组。
按照元素的数据类型分:基本数据类型元素的数组,引用数据类型的数据,即对象数组。
一维数组的使用
java语言中生命数组时不能指定其长度(数组中元素的数)。例如:inta[5];//非法
一维数组的使用:初始化
动态初始化:数组声明却为数组元素分配空间与复制的操作分开进行。
int[]arr=new int [9];
arr[0]=8;
静态初始化:在定义数组的同时九尾数组元素分配空间并赋值:
int arr[]=new int[]{2,4,6};
或:
int[]arr={3,4,5};
一维数组的使用:数组元素的引用
电影并运算符new为之分配空间后才可以引用数组中的每个元素。
数组元素的引用方式:数组名【数组元素下标
数组元素下表从0开始:长度为n的数组合法下标取值范围:0-》n-1;
如int a[]new int[3];
可引用的数组元素为a[0],a[1],q[2]
每个数组都有一个属性length知名他的长度,例如:a。length指明数组a的长度O(元素个数)
数组一旦初始化,其长度是不可变的。
一维数组的使用:数组元素的默认初始值:
数组是引用类型,他的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。例如:
public class test{
public static void main(String []args){
int a[]=new int[5];
System.out.pringln(s[3]);//a[3]d的默认值为0;
}
}
对于基本数据类型而言,默认初始化值个与不同
对于引用数据类型而言,默初始化值为null()
一维数组的使用:数组元素的默认初始化值
byte:0
short:0
int:0
long:0L
float:0.0F
char:0
bollen:false
引用类型:null
一维数组的使用
创建基本数据类型数组(1)
java中使用关键字new来创建数组
如下是创建基本数据类型的元素的一维数组
public class Tesr{
public Ststic void main(String args){
int[] s;
s=new int[10];
for (int i=0;i<10;i++){
s[i]=2*i+1;
System.out.pringln(s[i]);
}
}
}
数组中涉及的常见算法
1.数组的赋值(杨辉三角,回型数)
2.求数值类型数组中元素的最大值最小值,平均数,总和。
3.数组的复制,反转,查找(线性查找,二分查找)
练习5:
public class demo1 {
public static void main(String[]args){
int array[]=new int[10];
for(int i=0;i<10;i++){
array[i]=(int)(Math.random()*90+10)-1;
}
for(int j=0;j<10;j++){
System.out.println(array[j]);
}
}
}
数组使用中的常见异常
数组脚标越界异常ArrayIndexOutOfBoundsException
空指针异常
java中的任何数据类型都可以使用System.out.println方法吗
对基本数据类型而言,输出的往往是变量的值;
对于像数组这一类复杂的数据类型,输出的是其堆空间中尺寸位置的hashcode值
面向对象:
1.java类及类的成员
2.面向对象的三大特征
3.其他关键字
一。面向过程与面向对象
二。java基本元素:类和对象
三。对象的创建和使用
四。类的成员之一:属性
五:类的成员之二:方法
六:再谈方法
七:oop特征一:封装与隐藏
八:类的成员之三:构造器
九:关键字:this
十:和关键字:package
面向对象与面向过程
面向过程pop与面向对象oop
二者都是一种思想,面向对象是相对于面向过程而言的。面向过程强调的是功能行为,以函数为最小单位,考虑怎么做,面向对象,将功能服装金堆箱,强调具备了功能的对象,以类对象为最小单位,考虑谁来做。
面向对象国家强调运用人类在日常的思维逻辑中采用的思想与原则,如抽象,分类,继承,聚合,多态。
面向对象的三大特征
封装
继承
多态
创建java自定义类
步骤:
1.定义类
2.编写类的属性
3.编写类的方法
创建对象语法:类名 对象名=new 类名();
使用 对象名.对象成员的方式访问对象成员
类的访问机制:
在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。
(例外:static方法访问非static,编译通过)
在不同类中的访问机制:先创建要访问类的 对象,再用对象访问类中定义的成员
对象的产生:
匿名对象:
直接调用这个对象的发放。这样的对象叫做匿名对象
类的成员之一:属性
语法格式:
修饰符 数据类型 属性名=初始化值
1.修饰符
2.数据类型
3.属性名
变量的分类:成员变量与局部变量
在方法体外,类实体内的变量称为成员变量
在方法体内部声明的变量称为局部变量
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值,除了基本数据类型之外的变量类型都是引用类型
成员之二:
方法
将功能封装为方法的目的:可以事项代码重用,简化代码
java里的方法不能独立存在,所有的方法必须定义在类里。
1.方法的重载
2.可变形参的方法
方法参数的值传递机制
递归方法
重载的概念:
在同一个类中,允许存在一个以上的同名方法,只要他们的参数荷属或者参数类型不同即可。
重载的特点:
与返回值类型无关,只看参数列表,且参数泪飙必须不同
构造器的特征:
它具有与类相同的名称
他不能返回值类型
不能被static,final,synchronized,abstract,native
不能有语句返回值
构造器的作用;
创建对象:给对象进行初始化
java语言中,每个类都至少有一个构造器
默认构造器的修饰符与所属类的修饰符一致
一旦显示定义了构造器,则系统不在提供默认的构造器
一个类可以创建多个重载的构造器
父类的构造器不可以被子类继承
this的使用
this可以调用类的属性方法和构造器
当在方法内需要用到嗲用该方法的对象的时候,就应this
可以用this区分属性和局部变量
this()//调用本类中的无参构造器
java的内存管理之垃圾回收
分配;由jvm自动为其分配相应的内存空间
在程序中是否可以通过通知垃圾回收机制过来回收垃圾
能;要通过System.gc();Runtime.getRuntime().gc();
调用Runtime.getRuntime().gc();立即执行垃圾机制吗?
不是
但会加快垃圾回收机制的运行。
static
使用范围:
在java中,可用static修饰属性,方法,代码块
被修饰后的成员具备以下特点:
随着类的加载而加载
有限与对象存在
访问权限允许时,可不创建对象,直接被类调用
类变量
类变量有该类的所有实例共享
没有对象的实例时,可卡因用类名.方法名()的形式访问由static修饰的类方法
在static方法内部只能访问类的static修饰的属性或方法,不能访问类的feistatic的结构
异常:
1.异常概述与异常体系结构】
2.常见异常
异常处理机制
4.异常处理降级至二
5.手动抛出异常
6.用户自定义异常
在使用计算机语言进行项目卡法过程中,即使程序员把代码谢大尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是代码就能够避免的,比如,客户输入的格式,读取问价是否存在,网络是否保持通畅等。
异常:在java语言中,将持续执行的不正常情况成为异常;
开发过程中的原发错误和逻辑 错误不是异常
java程序在执行过征程中所发生的一场可分为两类:
Error:虚拟机无法解决的严重问题,如:jvm系统内部错误,资源耗尽等严重问题,比如:StackOverFlowError和oom,一般不编写针对性的代码进行处理:
Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理,liru:
空指针访问
试图读取不存在的文件
网络连续中断
数组角标越界
对于这种错误,一般有两种解决方法:意思遇到错误就种植程序的运行。另一种方法就是由程序员在编写程序的时候,就考虑发哦错误的检测,错误消息的提示,以及错误的处理
捕获错误最理想的实在编译期间,但有的错误只有在运行时候才会发生。
比如:出书wei0;数组数组下标越界
常见异常:
NullpointException
异常处理机制
在编写程序的时候,经常要在可能出现错误的地方加上检测的代码,
java异常处理
java采用的异常处理机制,,是将异常处理的程序代码集中在一起,与正常的程序代码分开,使得代码简洁,优雅,并易于维护
java异常处理的方式:
try-catch-finally
throws+异常类型
java提供的是一场处理的抓泡沫型
java程序的执行过程如出现异常,会生成异常类对象,该异常对象将被提交给java运行时系统,这个过程称为抛出(throw)异常
异常对象的生成
由虚拟机自动生成,程序运行过程中没虚拟机检测程序发生了问题
如果在当前代码没有找到相对应的处理程序,就会在后台自动创建一个对应异常类的实例对象并且抛出–自动抛出
由开发人员手动创建:Exception exception=new ClassCastException();
创建好的异常对象不抛出对程序没有任何影响,和创建一个普通对象一样。
异常处理机制二:
throws
多线程
1.程序,简称,线程
2.线程的创建和使用
3.线程的生命周期
4.线程的同步
5.线程的通讯
进程:是程序的一次执行过程,或是正在运行的一个程序
线程:进程可以进一步细化为线程,是一个程序内部的一个执行路径
若一个进程同一时间执行多个线程,就是支持多线程的。
线程作为调度和执行的单位,每个线程拥有独立的运行站和程序计数器,线程切换的开销小
一个进程的多个线程共享相同的内存大单元/内存空间,他们从同一堆中分配对象,可以访问相同的变量和对象,这就使得线程通信更简便,高效,但是多个线程操作共享的系统资源可能会带来安全隐患
多线程的优点
提高应用程序的响应
何时需要多线程
程序需要同时执行了两个或多个任务。
程序 需要实现一些需要等待的任务时,如用户输入,文件读写操作
线程的创建和启动
java语言的jvm允许程序运行多个线程,他通过java.lang.Thread类来体现。
Thread类的特性:
每个线程都是通过某个特定Tread对象的run()方法来完成操作的,把run()方法的主题称为线程体。
通过Thread对象的start()方法来启动这个线程,而非直接调用run()
thread类
构造器:
Thread():创建新的Thread对象
Thread(String threaname):创建线程并指定实例名
thread(Runnable target):指定创建线程的目标对象,他实现了Runnable接口中的run方法
Thread(runnable target,String name):创建新的 Thread对象。
API中创建线程的两种方式
继承Thread类的方式
21.定义子类继承Thread类。
子类重写Thread类中的run方法
创建Thread子类对象,即创建了线程对象
调用线程对象start发:启动线程,调用run方法
方式二:
定义子类,实现Runnable接口
子类中重写Runnable接口中的run方法
通过Thread类含参构造器创建线程对象。
将Runnable接口的子类对象作为实际参数传递给Thread类的构造器。
调用Thread类的start方法:开启线程
max_priority
守护线程是用来服务用户线程的,通过在start()方法前调用thread.setDaemon(true)可以把一个用户线程变成一个守护线程。
线程的生命周期:
jdk用Thread.State类定义了线程的集中状态
要想实现多线程,必须在住线程中创建新的线程对象,java语言使用Thread类及其子类的对象来表示线程,在他的一个完整的生命周期中通常要经历如下的五种状态。
新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象就处理新建状态
就绪:处理新建状态的线程被start()后,将进入线程队列等待cpu时间片,此时他已经具备了运行的条件,只是没有分配到cpu资源
运行:当就绪的线程被带哦都并会的cpu资源时,便进入运行状态,run()方法定义了线程的操作和功能
阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出cpu并临时终止自己的执行,进入阻塞状态
死亡:线程完成了他的全部工作或线程被提前强制的终止或出现异常导致结束。
枚举类
主要内容:
1.如何自定义枚举类;
如何使用关键字enum
enum类的主要方法
实现接口的枚举类
枚举类的入门:
类的对象只有有限个,确定的
当需要定义一组常量时,强烈建议使用枚举类
jdk1.5之前需要自定义枚举类
jdk1.5之后新增的enum关键字用于定义枚举类
若枚举类只有一个对象,则可以作为一种单例模式的事项方式:
枚举类的属性
枚举类对象的属性不应允许被改动,所以该使用private final、修饰
枚举类的使用peivate final 选秀时的属性应该在构造器中为其赋值
若枚举类显示的定义了带参数的构造器,则在列出枚举类的时候也必须对应的传入参数
自定义枚举类:
私有化类的构造器,保证不能在类的外部创建对象
2在类的内部创建枚举类的实力,声明为:public staticfinal
3.对象如果有实例变量,应该生命为private final,并在构造器中初始化
使用说明:使用rnum定义的枚举类默认继承了java.lang.Enum类,因此不能再继承其他类;
枚举类的构造器只能使用private修饰
枚举类的所有实例必须在枚举类中显示列出
Annotation其实就是代码里的特殊标记,这些标记抗原在编译,类加载,运行时被读取,并执行相应的处理,通过使用Anntation,程序员可以在不改变原有逻辑的情况下,开发韩剧和部署工具可以通过 这些补充信息进行验证。
ANNOTAtion可以想修饰符一样被使用可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation
的name=value对中
在javase中,注解的使用目的比较简单,例如标记过时的功能,忽略警告,子啊javaeez注解占据了更重要的角色,了例如用来配置应用程序的任何切面,代替javaee旧版中所遗留的繁冗代码和xml配置
未来的开发模式都是基于注解的,jpa是基于注解的spring2.5以上都是基于注解的,Hibernate3.x
以后也是基于注解的,现在的
java集合框架概述:
一方面,面向对象语言对事物的体现都是以对象的形式,为了方便多个对象的操作,就要对对象进行存储,另一方面,使用array储存对象方面具有一些弊端,而java集合就像一种容器,可以动态的把多个对象的引用放入容器中
数组在内存尺寸方面的特点:
数组初始化以后,长度就确定了。
数组声明的类型,就决定了进行元素初始化时的类型
数组在储存数据方面的弊端:
数组初始化以后,长度就不可变了,不利已扩展
数组中提供的属性和方法少,不便于进行添加,删除,插入等操作,且效率不高,同时无法直接货啊u储存元素的个数
数组存储的数据是有序的,可以重复,储存数据的特点单一
java集合类可以用于储存数量不等于
java集合可分为collection和Map
两种体系
collection接口:单列数据,定义了储存一组对象的集合
1.list:元素有序,可重复的集合
2.set:元素无序,不可重复的集合;
Mapo接口:双列数据,保存具有映射关系,key-value 的集合
collection接口时list,set 和queue接口的父接口,该接口里定义的方法既可以用于操作Set集合,也可以用于操作list和queue集合
jdk不提供接口的任何直接实现,二十提供具体的子接口(set,list实现)
在java5 之前,java集合会丢弃容器中所有对象的数据类型,把所有对象都当成object类型处理,从jdk5增加了泛型以后,java集合可以记住容器对象的对象类型
iterator迭代器接口
使用iterator接口遍历集合元素
itearator对象称为迭代器,主要用于便利collection集合中的元素,
gof给迭代器模式的定义为:提供一种方法访问一个容器对象中哥哥元素,而又不需要暴露该对象的内部细节。迭代器模式,就是为容器而生,类似于公交车上的售货员,火车上的乘务员,空姐
collection接口继承了javalang.iterable接口,该接口有一个iterator方法,那么所以有实现collection
饥饿口的集合类都有一个iterator方法,用于返回一个实现了iteerator的接口对象。
iterator仅用于遍历集合,iterator本身并不提供封装对象的能力。
如果需要创建iterator对象,则必须有一个被迭代的集合。
iterator可以删除集合的元素,但是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法
如果还未调用next()或在上一次调用next方法之后已经调用了remove方法,在调用remove都会报错
使用foreach循环集合元素
遍历操作不需获取collection或数组的长度,无需使用索引访问元素
遍历集合的底层调用itertor完成操作。
List接口概述:
鉴于java数组用来储存数据的局限性,我们通常十一ingList代替数组。
list集合类中元素有序,且可重复,集合中的每个元素都有其对应的顺序索引。
list容器中的元素都对应一个整数型的序号记载其在容器中的位置。可以根据序号存取容器中的元素。
jdk 中,api中list接口的实现类常用的有:Arraylist,linkedList,vector.
list接口方法:
list除了从collection集合继承的方法外,list集合里添加了一些根据索引来操作集合元素的方法。
void add
object get
object remove
object set
list实现类之一:ArrayList
ArrayList是list接口的典型实现类,主要实类。
本质上,Arraylist是对象引用的一个边长数组
ArrayList的jdk18之前与之后的实现区别:
jdk1.7:ArrayList是饿汉式,直接创建于初始容量为10 的数组;
jdk1.8后:ArrayList是懒汉式,一开始创建于长度为0 的数组,当添加第一个元素时,再创建于始容量为10 的数组;
ArrayList
List实现类之二:LinkeList
对于频繁的插入或删除的操作,建议使用LinkedList类,效率较高
LinkedList:双向链表,内部没有声明数组,二十定义了Node类型的first和last,用于记录手末元素,同时,定义内部类Node,作为Linklist中报春数据的基本结构,Node除了八平村数据,还定义了两个变量:
prev
next
list实现类之三:Vector
vector是一个古老的集合,jdk1.0就有了,大多数操作与Arraylist相同,区别之处在于vector是线性安全的。
collection子接口之二:set接口
set接口时collection的子接口,set接口没有童工二外的方法
set集合不允许包含相同的元素,如果试把两个相同的元素加入同一个set集合中,则添加操作失败
set判断两个对象是否相同不是是哦那个==运算符,二十根据equals方法
set实现类之一:hashset
hashset是set接口的典型实现,大多数时候使用set集合的死后都使用这个实现类
hashset按hash算法来储存集合中的元素,因此具有很好的存取,查找,删除性能
hahset具有以下特点:
不能保证元素的排序顺序;
hashset不是线性安全
集合元素可以是null;
haashset集合判断两个元素相等的标准:两个对象通过hashcode()方法比较相等,并且两个对象的equals方法返回值也相等。
对于村南方set容器的对象,对应的了一定要重写equals和hashcode方法,以实现对象相等规则。即相等的对象必须具有相等的散列码
向hashset中添加元素的过程:
当向hashset集合中存入一个元素时,hashset会调用该对象的hascode方法,来得到该独享的hashcode值,然后根据hashcode值,通过某种散列函数决定该对象在hashset底层数组的储存位置,
两个元素的hashcode值相等,会再继续调用equals方法秒如果equals方法结果为true。添加失败,但是该数组的位置已经有元素了,那么会通过链表的方式继续链接。
泛型的概念:
所谓泛型,就在允许在定义类的时候,通过一个标识标识类中某个属性的类型或者某个方法的返回值及参数类型。这类型将在使用时(例如,继承或实现这个接口,用这个类型声明,创建对象时,确定(即传入实际的类型参数,也称为类型实参))
、
congjdk1.5以后,java引入了参数化类型的概念,允许我们在创建集合时在指定集合元素的类型,正如 List,这表明该Lidt只能保存字符类型的对象。
jdk改写了集合框架中的全部接口和类,为这些接口,类,增加了泛型支持,从而可以在声明集合变量,创建集合对象时传入类型实参。
那么我们为什么要有泛型呢,直接object不是也可以储存数据吗:
1.解决元素存储的安全性问题,好比商品,药品标签,不会弄错。
2.解决获取数据元素时,需要类型强制转化的问题,好比不会每回拿商品,药品都要辨别。
在集合中没有泛型时:
String->添加Object类型对象-》读取-》object类型-》强转——》String
io流
1.file的使用
2.io流原理及流的分类
3.节点流或文件流
4.缓冲流
5.标准输入,输出流
6.。打印流
8.数据流
9.对象流
10随机储存文件流
11.nio的path,paths,files的使用
File的使用:
java.io.File:文件和问价目录路径的抽象表示形式,与平台无关,File能新建,删除,重命名文件和目录,但File不能访问文件内容本身。
如果需要访问文件内容本身,则需要使用输入/输出流;
想要在java程序中表示一个真实存在的文件或目录,那么必须要有一个File对象,但是ajava程序中的File对象,可能没有一个真是车子在的文件或目录。
File独享可以作为参数传递给流的构造器。
public File(String pathname)
一pathname为路径创建Tilel对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.die中储存。
绝对路径:是一个固定的路径,从盘符开始
相对路径:是一个相对某个位置开始
public File*(S听parent,String child)
以parent为父路径,child位子路径创建File对象。
File类的使用:路径分隔符
路径中的每个每级牡蛎之间一个路径你分隔符隔开。
路径分隔符和系统有关:
windows和dos系统默认使用“、”\表示
File类使用:常用方法
Fil类的获取功能:
public D听getAbsolutePath():获取绝对路径
public String getPath:获取路径
public String get name();获取名称
public long length()获取问渐渐长度
File类的判断功能;
public boolean isDirectory();:判断是否是文件目录
publicBoolean isRFike():判断是否是文件
public boolean exisrs():判断是否存在
public boolean canWrite():判断受否可写
File类的创建功能:
public boolean createNewfILE():吵架呢文件。若文件存在,则不创建,返回false
public boolean mkdir():创建文件目录。如果此文件目录存在,就不创建了。
如果文件目录的上层目录不存在,也不创建。
File类的删除功能:
public boolean delete():删除文件或者文件夹
java中的删除不走回收站
io流原理: