
一、Java的历史(了解)
任职于Sun(Sun MicroSystems)公司的詹姆斯·高斯林(James Gosling)等人于1990年代初开发Java 语言的雏形,最初被命名为Oak,目标是应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。但由于当时智能家电需求不高,Sun公司放弃了该项计划。
随着1990年代互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,詹姆斯高斯林}提出我们的需要一个新名字。但当时Oak已经被一家显卡制造商注册,不可能再用了。詹姆斯·高斯林决定召开一个命名征集会,在会上,大家提出了十几个名字,按评选次序把名字上报给商标律师。排在第一位的是Silk(丝绸),据说大部分人都喜欢这个名字,但詹姆斯·高斯林坚决反对。 排在第二和第三的都没有通过律师这一关。 排在第四位的名字、得到了所有人的认可和律师的通过,这个名字就是Java。第一个提议名字Java的是马克奥颇门(Mark Opperman),马克奥颇门是在一家咖啡店与同事品尝咖啡时得到的灵感;Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。国外的许多咖啡店都用Java来命名或宣传,以彰显其咖啡的品质。于是1995年5月23日Java的名称正式发布,语言的Logo是一杯热气腾腾的咖啡。 Sun(Sun MicroSystems)公司于2010年被甲骨文(Oracle)公司收购。
Java version版本:
二、Java语言概述和基础
(一)、Java基础知识
1.Java特性
(1)面向对象
(2)解释行
(3)可移植
(4)高性能
2.java运行流程
.Java文件通过Java编译器(Javac)编译生成.class文件,.class是字节码文件,可由JVM执行
源文件: 文件名.java
编译器: javac文件名.java
生成字节码文件 文件名.class
Java虚拟机 Java解释器运行
字节码保证可移植性,Java文件编译后每个class对应一个.class文件,每个类对应一个字节码文件
3.Java开发环境

4.Java标识符命名
(1)由字母,下划线,美元符号,数字组成
(2)第一个字符必须是字母
(3)不可以使用Java关键字
(4)严格区分大小写
(5)标识符识别大小写
(二)、基本数据类型

1.byte-->short,char-->int(默认整数)-->long-->float-->double(默认小数)
2.数据类型转换:
(1)隐式转换(自动类型转换)
当把一个较小的类型的变量赋值给一个较大数据类型的变量时,Java会自动进行类型转换。这种转换是·安全的因为较大数据类型的变量能存储任何较小数据类型的值
(2)显示转换(强制类型转换)
当把一个较大的数据类型的变量赋值给一个较小数据类型的变量时,需要显示地进行类型转换。这种类型转换可能会丢失数据,因为较小数据类型的变量可能无法储存较大数据类型的全部值。
比int低级发整数运算时自动转化成int
(三)、Java运算符
1.运算符
算数运算符:+ , - , * , / , % , ++ , --
关系运算符:> , < , >= , <= , == , !=
布尔逻辑运算符: ! , & , | , && , ||
赋值运算符:= , += , -= , *= , /=
三目(条件)运算符:式子1 ? 式子2 : 式子3
& 与 &&( | 与 || )的区别
&:左面无论真假,右边都会运算
&&:一旦左面为假,立刻返回false,右边不在计算
2.表达式
操作数,运算符,按一定一定语法形式组成的序列
(四)、Java流程控制语句
三、字符串与数据
(一)、数组
1.数组的声明与创建
一维:声明:int [ ] arr; int arr[ ]; ,创建:arr=new int[……];
二维:声明:int [ ] [ ] arr; int arr [ ] [ ]; ,创建arr=new arr[……][……];
2.数组可以用arr.length 获取数组长度,下标是从0开始计算的
3.数组初始化
(1)静态初始化 float [ ] arr ={ };
(2)动态初始化 float [ ] arr =new float[ 2 ]; arr[0]= ; arr[1]= ;
4.数组下标越界:系统崩溃,抛出异常,中止程序
(二)、字符串
1.串连接:
String s1="Hello";
String s2="World";
String s3=s1+s2; //s3="HelloWorld"
2.获取长度和下标
String s1="Hello World";
int n=s1.length(); //11
int j=s1.indexof("e"); //1
3.字符串与数字相互转化
String s1="100";
int x=Integer.parseInt(s1); //x=100
float y=10.0f
String s2=String.valueOf(y); //10.0
4.字符串比较时 “==”是比较地址,String.equals()才是比较值
5.String是不可变常量(final),修改通通都是新地址如果新String只是别名形式,则复用以前的String字符串
6.String是Java中定义的⼀个类,⽤于表示字符串,它不是关键字。
四、面向对象(三大特征)
(一)、三大特征
封装性,继承性,多态性
(二)、类与对象
1.类:用来描述一类对象的共同特征和行为,成员变量描述对象特征,方法描述对象行为
2.对象:类的实例化,一般代码中对象才能方法调用
3.构造器:
(1)构造器:方法名与类名一致,方法名前没有返回值类型声明,作为初始化成员变量,即使类中没有定义任何一个构造方法,默认生成一个无参构造函数,如果定义了类的构造方法就不会再生成默认的方法,一个类可以定义多个构造方法。
(2)构造器在对象创建时调用,而不是类定义时,由JVM调用,不是由其他方法调用
(3)构造函数可以重载
(4)构造方法和普通方法的区别
(三)、常见关键字
1.this关键字
(1)this一般写在实体类中,表示当前对象
(2)可以使用this调用属性和方法
(3)this方法可以调用构造方法,但必须在构造方法中调用另一个构造方法,且在首行
(4)this在非静态和构造方法中使用
2.static关键字
(1)static关键字被称为静态关键字,常见的形式有静态方法和静态变量,属于类内不属于对象,所有可以使用“类名.方法名”来访问,不能在方法中定义。
(2)static方法中不能有this调用的方法
(3)static方法只能访问静态成员,且优于非静态成员加载
3.final关键字
(1)可以修饰 类、变量和方法,类不能被继承,方法不能被重写,变量是常量
(四)、抽象类和接口
1.抽象类
包含抽象方法的类,称为抽象类,抽象方法只是一个声明,没有具体实现,abstract声明不能实例化为对象,继承时要么还是抽象类要么重写所有抽象类
抽象类不能直接实例化但是可以定义抽象类的变量,并引用其具体子类的实例:
Person P=new Student("Alice","Computer Science");
2.接口
接口就是一种被规范的标准,接口的表现在于行为的抽象,只包含抽象方法和常量。接口默认是public,如果不使用public,则默认具有包访问权限。接口不能用private或protected修饰,这与类的修饰规则不同。,接口可以继承其他接口,允许多层次的接口扩展。
五、Java高级特性
(一)、访问权限控制

private成员变量仅能在其所属类内部访问,适合保护数据的封装性
public成员变量可以被所有类访问
pritected成员变量可以被同包内的类以及子类访问
访问权限针对类中和的属性和方法,而不是方法中的局部变量
(二)、重载和重写
1.重载
方式重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同参数形式(参数类型不同,参数类型不同,参数顺序不同)
2.重写
也称方法覆盖,就是子类有一个方法和父类的方法和名称,返回类型参数相同拥有不同的方法体
3.方法的重写和重载是Java多态性的表现,重写是父类子类之间多态性的一种表现,重载可以理解成多态具体表现形式
(三)、内部类
类内部还有一个类,匿名内部类则是内部类的一种简化方法,其必须是继承一个类或实现接口。
(四)、继承
1.类的继承是在现有类的基础上,构建一个新的类,子类会自动拥有父类所有可能继承的属性和方法,用extends关键字表示一个类继承自另一个类
2.Java仅支持单继承,一个类只能继承一个父类,多个类可以继承一个父类
3.Java支持多层继承,也就是父类、子类、孙子类的继承关系。这被称为继承链,在这种情况下,子类可以继承父类的特性,孙子类可以继承子类的特性。Java中子类和父类是一个相对的概念
4.Java提供supper关键字,以用于子类对象访问父类的成员,不能指代父类的父类
5.子类不能继承父类的构造方法
6.子类中的方法名,返回类型和参数必须与超类一致,子类不能直接访问超类的私有字段1
六、异常处理
(一)、异常
异常指的是在程序执行过程中发生的错误或意外情况,可能导致程序的正常流程被打断
(二)、异常的分类
在Java中,异常是一个对象,所有异常直接或间接的继承Throwable类
Error表示系统级的错误和不必处理的异常
Exceprtion表示需要捕获或者需要程序处理的异常

(三)、异常的捕获处理
try{
可能抛出的异常
}
catch{
异常处理
}
finally{
结束前必须执行的语句
}
一个try可以对应多个catch
try-catch-finally可嵌套使用
finally块在try块中return语句之前执行,finally块中return语句返回结果会覆盖try块语句的返回结果
(四)、throw抛出异常
throw和throws的区别:
(1)throw是语句抛出一个异常;throws是方法抛出一个异常
(2)throw不能单独使用,和try-catch-finally或throws配套使用;throws可以单独使用
七、集合和多线程
互斥锁关键字
synchronized是Java提供的关键字,用于线程同步。它可以在方法或代码块上加锁,从而确保同一时间只有一个线程只有一个线程可以访问该代码
sleep()和wait()的区别
sleep()方法是使线程停止一段时间的方法,在sleep时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻其他线程可能正在运行而且没有被调用为执行程序
wait()是线程交互时,如果线程对于同步对象发出一个wait()调用,该线程会暂停执行,被调对象进行等待状态,直到被唤醒或等待时间到
文件数据读取对象
FileInputStream 读取文件内容的类
FileOutputStream 用于将数据写入文件
DataOutputStream 用于写入数据的流,不能读取文件
FileWriter 也用于写入数据,基于字符流
注意:
1.this与supper的区别
2.如何实现类的封装
练习
Randomly generate integers(between 0-100)and display them and then caculate the maxinum value and mininum value,and value of all elements
Comments NOTHING