JDK环境变量的配置
在Windows系统下配置环境变量:1 首先下载java开发工具包 2 最好是下载JDK1.8版本的,因为我们在
开发过程中会选择最稳定的版本而不是最新的版本 3 安装下载的JDK程序
JKD的安装
1 右击我的电脑,选择属性,选择的高级系统设置,点击环境变量
2 在Path里面把我们安装的JDK安装路径添加进去
3 按windos加R键输入cmd,在doc命令窗口里输入javac命令,验证环境变量是否配置成功
java基本语法
1 对象:对象是类的一个实例,有状态和行为.例如一条狗是一个对象,它的属性有:颜色,大小,名字,品种
它的行为有:跑,叫,吃饭,睡觉等
2 类:类是一类对象的模板,我们把多个对象中的相似属性与行为抽象出来,放在一个集合中这个集合就叫做类
3 方法:方法也叫做行为,一个类可以有多种方法,逻辑运算,数据修改及其所有动作都是在方法中完成的
4 实例变量:每个对象都有独特的实例变量,对象的属性由这些实例变量的值决定
第一个java程序
public class Dog{
public static void main(String [] args){
System.out.println("这是一只狗");
}
}
使用notepad++ 将上面这段代码写下,然后使用doc命名将上面的java原文件编译成class文件 然后进入当前class文件下的路径,使用javac空格 原文件类名+.java 生成class文件 然后使用 java+空格+文件名 运行class文件.
java基本语法需要注意的几点
1 大小写敏感: Hello和hello 是不同的.
2 类名若由一个英文单词组成,首字母应该为大写,若由多个单词组成,则遵从驼峰原则.
3 方法名若由一个单词组成则首字母应该为小写,若有多个单词组成则从第二个单词起首字母为大写
4 源文件名:一个源文件里面可以有多个类但是公共的类!!!也就是以**public修饰的类名** 只能有一个并且源文件的文件名要与公共的类名一致!
5 主方法public static void main(String [] args){} 这是程序的入口,所有的java程序都由主方法开始执行
java标识符
1 所有的标识符都由 字母,数字,下滑线或者美元符号$开始
2 标识符不能以数字开头
3 标识符大小写敏感
4 关键字不能作为标识符
java修饰符
1 访问控制修饰符:default public protected private(public公共的 private私有的,一般被私有修饰的不能被继承)
2 非访问控制修饰符 : final abstract static synchronized (abstract 为抽象的 static为静态的)
java变量
1 局部变量(在方法中或者构造方法中,语句块中的变量称为局部变量,变量声明和初始化也就是赋值都在方法中,方法结束,局部变量随之销毁)
2 成员变量(在方法外类中,在创建对象实例化,会随对象进入堆内存开辟的空间中,可以被类中的方法,构造方法和特定类的语句块访问)
3 类变量 (被static修饰的,静态变量,在类中方法体外)
java注释
1 //双斜杠是单行注释
2 /**/是多行注释
3 /***/是文本注释可以生成javadoc的说明文档
java创建对象
对象是根据类来创建的,使用关键字new来创建一个对象
1 声明:声明一个对象,包括对象的名称和类型
2 实例化:使用关键字new来创建一个对象
3 初始化:使用new创建对象时,会调用构造方法(也就是构造器)来初始化对象
构造方法(也叫构造器)每个类都有一个构造方法,如果我们没有手动为这个类添加一个构造方法,java编译器会默认提供一个空参构造方法,在new对象的时候至少会调用一个构造方法(空参构造器),一个类可以添加多个构造方法,有参和无参构造方法都可以,构造方法的名称要对类名一致
java实例化变量与方法的调用
1 创建对象 Dog dog =new Dog();
2 通过实例化变量(也就是创建的对象来调用方法)写法为:dog.eat();
java数据类型
1 基本数据类型:
byte:
8位占1个字节
范围(-128,127)
默认值为:0
byte类型变量占用空间为int类型变量的四分之一
short:
16位占2个字节
范围(-2^15-2^15 - 1)
默认值:0
short类型变量占用空间为int类型变量的二分之一
int:
32位占4个字节
范围(-2^31-2^31 - 1)
默认值为:0
long:
64位占8个字节
范围(-2^63-2^63 -1)
写法为:2000000L (L为大写因为小写与数字1难以区分)
默认值:0
float:
float :单晶浮点型 32位占4个字节
默认值与写法:0.0f
double:
double:双精浮点型 64位占8个字节
一般在声明的时候系统会默认小数写法为double型
boolean:
boolean:布尔型,占1位,0和1,true和false
默认值为:false
char:
char:单个字符型 'a'占16位的Unicode 字符
只能储存单个字符
2 引用类型
引用类型类似一个指针,相当于存变量的地址
对象和数组都是引用数据类型
所有引用类型的默认值都是null
一个引用变量可以用来引用任何与之兼容的类型
java常量
常量在运行是不可以修改的
在java中使用final关键字来修饰的称为常量
常量的变量名通常为大写
java自动类型转换
byte,short,char—> int —> long—> float —> double
小的的数据类型可以转为大的,但是大的转为小的会超出范围,如果一定要转需要用到强制转换
转换规则:
1 不能对布尔类型进行转换
2 不能把对象类型转换成不相关类的对象
3 在把容量大的类型转换为容量小的类型时必须使用强制类型转换
4 转换过程中可能导致溢出或损失精度
5 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
强制类型转换
1 条件是转换的数据类型必须是兼容的
2 格式:int i1 = 123; byte b = (byte)i1
隐含强制类型转换
1 整数默认是int类型
2 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f
java变量类型
1 类变量: 独立方法之外,用static修饰
2 实例变量:不用static修饰,也叫成员变量
3 局部变量:类的方法中的变量
局部变量
1 局部变量声明在方法、构造方法或者语句块中
2 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁
3 局部变量只在声明它的方法、构造方法或者语句块中可见
4 局部变量是在栈上分配的
5 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用
实例变量(成员变量)
1 实例变量声明在一个类中,但在方法、构造方法和语句块之外
2 当一个对象被实例化之后,每个实例变量的值就跟着确定
3 实例变量在对象创建的时候创建,在对象被销毁的时候销毁
4 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息
5 实例变量可以声明在使用前或者使用后
6 访问修饰符可以修饰实例变量
7 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见
8 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定
静态变量
1 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外
2 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝
java修饰符
1 private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
2 public : 对所有类可见。使用对象:类、接口、变量、方法
3 default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法
4 protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
java运算符
1 自增(a++) 自减(a--) 前缀(++a) (--a)
2 关系运算符:==(相等) !=(取反)
3 逻辑运算符:&&(两边都为真才为真) ||(两个中有一个满足为真结果就为真) !(非)
4 条件运算符a?b:c(如果a成立就为b否则就为c)
java循环结构
1 while(true)如果结果为真 while里面的循环将一直进行下去
2 do......while()就算不满足条件,循环体里面的内容还是会执行一遍
3 for执行一次循环后,更新循环控制变量,再次检测布尔表达式。循环执行上面的过程
4 增强for循环:for(声明语句 : 表达式){}
5 break:用在switch循环里,用于跳出循坏体
6 continue:用于任何循环语句结构,作用是结束本次循环,进行下一次循环
7 if判断条件语句写法为:if(表达式){}
8 if....else:if(表达式){}else{}如果表达式为true就执行if语句块 如果为false就执行else语句块里面的语句
9 if..else.if 这种可以添加多个判断表达式
10 switch case:语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句
switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句
java类的继承
1 如果有两个类中的属性和方法有大多数一致,我们可以从这两个类中抽象出一个父类(超类),然后让两个类继承这个父类,这样做法的好处可以是程序变得灵活与轻巧,减少重复的代码量
2 子类拥有父类非 private 的属性、方法
3 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
4 子类可以用自己的方式实现父类的方法(方法重写)
5 java中的继承是单继承即:a继承b, a继承c,一个父类可以有多个子类,但所有子类只能有一个父类
6 继承关键字:extends 写法 class A extends class B
super 与 this 关键字
1 super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类
2 this关键字:指向自己的引用
3 final关键字:final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写
java构造器
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器
java中的方法重写
1 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变
2 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法
3 参数列表必须完全与被重写方法的相同
4 访问权限不能比父类中被重写的方法的访问权限更低
5 父类的成员方法只能被它的子类重写
6 声明为final的方法不能被重写
7 声明为static的方法不能被重写,但是能够被再次声明
8 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法
9 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法
10 构造方法(构造器)不能被重写
11 如果不能继承一个方法,则不能重写这个方法
12 当需要在子类中调用父类的被重写方法时,要使用super关键字
java方法的重载
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载
1 被重载的方法必须改变参数列表(参数个数或类型不一样)
2 被重载的方法可以改变返回类型
3 被重载的方法可以改变访问修饰符
4 方法能够在同一个类中或者在一个子类中被重载
5 无法以返回值类型作为重载函数的区分标准
重写与重载的区别
1 方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载
2 方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写
3 方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现
java的多态
必要条件:1 继承 2 重写 3 父类引用指向子类对象
多态的实现方法
1 重写 2 接口 3 抽象类和抽象方法
java抽象类
1 抽象类里面只能有抽象方法,抽象方法没有方法体
2 抽象类子类要继承它,而且必须要重写(实现)方法
3 抽象类用abstract修饰词修饰的类称为抽象类
4 抽象类不能被实例化
5 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
6 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能
7 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法
8 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类
java封装
用private修饰的属性 为私有的,如果子类要访问者用private 修饰的属性,需要通过getter和setter方法(属性设置器和属性访问器)
java接口
1 简单理解为里面全是抽象方法
2 接口通常以interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法。
3 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法
4 接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类
接口与类的区别
1 接口不能用于实例化对象
2 接口没有构造方法
3 接口中所有的方法必须是抽象方法
4 接口不能包含成员变量,除了 static 和 final 变量
5 接口不是被类继承了,而是要被类实现
6 接口支持多继承
接口的特性
1 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract
2 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量
3 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法
接口和抽象类的区别
1 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行
2 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的
3 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法
4 一个类只能继承一个抽象类,而一个类却可以实现多个接口
5 接口的写法:Interface关键字用来声明一个接口
6 接口中的方法都是公有的
7 个接口能继承另一个接口,这和类之间的继承比较相似
8 接口可以多继承 写法为:public interface Hockey extends Sports, Event
java数组
1 储存同类型大小一致的元素
2 首先必须声明数组变量,才能在程序中使用数组
3 写法:double[] a或 double a[]
4 数组的元素是通过索引访问的。数组索引从 0 开始
5 使用for循环来遍历数组
6 二位数组:int b[][] = new int[2][3]
7 动态初始化:直接为二位数组分配空间
8 比较数组:通过 equals 方法比较数组中元素值是否相等
9 通过 binarySearch 方法能对排序好的数组进行二分查找法操作
java异常处理
1 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略
2 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略
3 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
java捕获异常
1 使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方
2 Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查
3 如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样
4 一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获
5 如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的
6 一个方法可以声明抛出多个异常,多个异常之间用逗号隔开
7 finally 关键字用来创建在 try 代码块后面执行的代码块。无论是否发生异常,finally 代码块中的代码总会被执行。在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。finally 代码块出现在 catch 代码块最后
8 在 Java 中你可以自定义异常
9 所有异常都必须是 Throwable 的子类
10 如果希望写一个检查性异常类,则需要继承 Exception 类
11 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类
通用异常:
1 NullPointerException(空指针异常) 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。
2 IllegalArgumentException 类,IllegalStateException 类