java入门
JDK:java开发环境 jdk包含jre和jvm
JRE:java运行环境
JVM:java虚拟机
java是什么?
简单来说Java语言是一门跨平台的计算机开发语言
安装JDK都安装了什么?
安装JDK,同时安装jre
为什么安装jre?什么是java的平台无关性?
jre为运行环境,不可缺少
Java经过编译之后生成的.class 的字节码文件,运行平台上只要有JVM就能运行,不需要进行再次编译
环境变量的作用:
CLASSPATH环境变量:作用是指定类搜索路径
JAVA_HOME环境变量:它指向jdk的安装目录
Path : 指向bin文件夹
java和javac的作用
javac编译java文件生成.class文件;java执行.class文件
java的命名规范
一般情况 见名知意
包名: 1 全部小写的英文字母
2 层级关系 使用 . 分割
class类:抽象的一个事物的组成
public class 类名{
}
类名: A 首字母大写 其他的后续单词遵循驼峰命名法(如果有多个单词组成,每个单词的首字母都大写)
B public修饰的 类 必须与文件名相同
C 一个java文件中,只可以有一个以public修饰的类
D 数字 字母 $ 可以用于组成类名,不能以数字开头
变量的分类
类型: 整数类型 浮点类型 布尔类型 字符型
整数类型:byte(字节型) short(短整型) Int(整型 ) long(长整型)
| 类型 | 字节 |位数 | 取值范围
|-byte-|-1-| 8 | -128~127
|short| 2 | 16 | (-2)的15次方~2的15次方减一
|int | 4 | 32 | (-2)的31次方~2的31次方减一
|long | 8| 64 | (-2)的63次方~2的63次方减一
布尔类型 Boolean
字符串:字符型 char = ‘’ unicode码
a : unicode 编码
b:单个字符,英文的单引号内 char = ‘’
c:可以直接写字符对应的编码 char ch=65
d:可以参与运算
浮点型 :单精度浮点型 float
双精度浮点型 double
开发java程序的步骤
1.创建源代码 创建文档 .java文件
2.编译源代码 将 .java文件转化为 .class文件 /javac 文件名
3.运行.class文件 虚拟机 jvm /java 类名
类:
类:对象的模板 描述一类对象的行为和状态
对象:类的实例 (万物皆对象)有行为和状态
类由什么组成: (属性和方法)
一个java文件中可以有多个类,但只有一个主类,被public修饰,且主类名称和java文件名相同
属性:属性可以理解为对象的数据,
声明方式:(访问权限修饰符)(修饰符)数据类型 属性名(=初值)
方法:即对象的行为,也称函数。
声明方式:声明形式:(访问权限修饰符)(修饰符)返回值数据类型 方法名
(形式参数列表){
执行语句;
return;
}
方法的特点:对功能代码进行封装;便于进行功能复用(调用方法);没有返回值,用void修饰,return语句可以不写;方法中可以调用方法,不可以在方法内部定义方法;定义方法时,方法的结果返回给调用者;
方法的重写和重载:overloading和override
-
重载
overloading 重载: 前提:在同一个类中
要求:方法名相同,参数列表不同(数量、顺序、类型),在同一作用域
注意:和返回值以及权限修饰符没有关系 -
重写
override 重写
前提:建立在继承之上(子类继承父类,子类重写父类方法)
注意:方法名和参数列表以及返回值 都必须一样;如果调用方法时,则调用的是重写后的方法,如果要调用父类方法,则使用super关键字在子类中调用父类的方法
“super.方法名(参数列表)”
区别:
重载 | 重写 |
---|---|
同一个类之中 | 不同的类 |
方法名相同 | 方法名不同 |
参数列表不同 | 参数列表相同 |
修饰符无关 | 修饰符必须大于父类 |
可以抛出父类没有的异常 | 不能抛出父类没有的异常 |
返回值类型不同 | 返回值类型相同 |
面向对象多态 | 与面向对象继承 |
权限修饰符: 子类>=父类
异常 子类<=父类
修饰符 本类 同一个包中的类 子类 其他类
public 可以访问 可以访问 可以访问 可以访问
protected 可以访问 可以访问 可以访问 不能访问
默认 可以访问 可以访问 不能访问 不能访问
private 可以访问 不能访问 不能访问 不能访问
接口和抽象类的区别:
接口:interface implements 无构造器
构造方法:类名与方法名相同,构造器无返回值类型
抽象类:abstract extends 抽象类的构造器不能创造对象 不能被实例化
抽象类中可以有属性、方法、构造方法,都是用来给子类继承的
抽象类里可以全都是普通方法,如果一个类里有抽象方法,这个类一定是抽象类,
接口里只能有抽象方法,接口中的属性默认为静态常量 static int User=10;
抽象类有构造方法,
接口 抽象类
interface abstract
implement extends
无构造器 有构造器(构造器不能创造对象)
可以继承一个或多个其他接口 可以继承一个类和实现多个接口
无main方法,不可运行 可以有main方法,可运行
修饰符只有public 修饰符有public、private、default等
不存在方法的实现 有默认的实现方法
成员变量只能是public static final类型的 成员变量可以是任何类型
构造方法可以被重写吗?为什么?
不能重写但是可以重载,因为构造方法不能被继承
final修饰的属性可以被继承,但是不能修改,修改后就成为子类所特有的
构造方法不能被子类继承
面向对象三大特征:封装,继承,多态
封装:将类的某些信息隐藏在类内部,不允许外界程序直接访问,而是通过该类提供的方法(例如:get方法、set方法)来实现对隐藏信息的操作和访问
只在当前类有效,外界不可直接访问,只能通过该类提供的方法进行访问,属性用private修饰
继承: 子类继承父类 extends implements 不可多重继承,可以用接口实现
特性: 子类重写父类方法
子类不可以继承父类:private、构造器、被final修饰的类、
被final修饰的方法可以继承,但不能重写
private修饰的类、属性、方法都不能被继承
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
约束关系:1 按继承关系,构造方法是从上到下进行调用的
2 如果子类没有构造方法,则它默认调用父类无参的构造方法,如果父类中没有无参的构造方法,将产生错误
3 如果子类有构造方法,那么创建子类对象时,先执行父类的构造方法,再执行子类的构造方法
4 如果子类有构造方法,但子类的构造方法中没有super关键字,则系统会默认执行该构造方法时会产生super()代码,即该构造方法会调用父类无参数的构造方法
5 对于父类中包含有参数的构造方法,子类可以通过在自己的构造方法中使用super关键字来引用,而且必须是子类构造函数方法中的第一条语句
6 Java语言中规定当一个类中含有一个或多个有参构造方法,系统不提供默认的构造方法(即不含参数的构造方法)
7.实现:更抽象的继承 implements 通常指接口的实现 实现一个接口就是要实现该接口的所有方法(抽象类除外)
8.接口中的方法都是抽象的,多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口
9.子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
10.如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
多态:多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作
多态存在的三个必要条件:重写、继承、父类引用指向子类对象
关键字
- super
(1):用来访问被当前对象隐藏的父类成员
super.<成员变量方法>
(2):调用父类的构造函数 super(调用参数列表)
this:用来引用当前对象
2.implements:类实现接口,用来实现接口中定义的抽象方法 可实现多个接口,子类不可以覆盖父类的方法或者变量(即使子类定义与父类相同的变量或者函数,也会被父类取代)
3.extends:继承父类(被final修饰、定义为abstract除外),也可以调用父类初始化this.parent(),会覆盖父类定义的变量或者函数 若同时用到extends和implements时,extends必须放在implements之前
4. abstract:定义抽象类、定义抽象方法(不需要实现)
5. interface:定义接口