- java跨平台:
- JRE:
- JDK:
- jdk,jre和jvm的关系:
- jdk的安装目录:
- 为什么要配置Path环境变量:
- 计算机存储单元:
- 数据类型
- 数字类型内存占用和取值范围
- 变量:
- 类型转换:
- 自增自减运算符
- 逻辑运算符:
- 短路运算符:
- 三元运算符:
- for,while, do…while三种循环的区别
- for和while的区别
- 成员变量和局部变量的区别
- 构造方法:
- 关键字this与super的区别
- 继承中的构造方法的访问特点
- 继承中成员方法的访问特点:
- 方法重写注意事项:
- 权限修饰符
- 状态修饰符 final:
- 状态修饰符static
- 多态
- 抽象类
- 接口
- 接口与抽象类的区别与联系
- 形参和返回值
- 内部类
- 常用API
在需要运行java应用程序的操作系统上,安装一个与操作系统对应的虚拟机(jvm)即可。
JRE:Java Runtime Environmrnt 是java程序的运行环境,包含jvm和运行时所需要的核心类库。我们想要运行一个已有的程序,那么只需安装jre即可。
JDK:Java Development Kit 是java程序开发工具包,包含JRE和开发人员使用的工具。其中的开发工具:编译工具(javac.exe)和运行工具(java.exe)。我们想要开发一个全新的java程序,那么必须安装jdk。
jdk,jre和jvm的关系: jdk的安装目录: 为什么要配置Path环境变量:开发java程序,需要使用jdk提供的开发工具,而这些工具在jdk的安装目录的bin目录下。为了在开发java程序时,能够方便的使用javac和java这些命令,我们需要配置path环境变量。
计算机存储单元:1B(字节)=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
数据类型 数字类型内存占用和取值范围说明:e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方
整数默认是int类型,浮点数默认是double类型
变量:long类型的变量定义时,为了防止整数过大,要加L
float类型的变量定义时,为了防止类型不兼容,要加F
类型转换:自动类型转换:把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量
强制类型转换:把一个表示数据范围大的数值赋值给另一个表示数据小的变量。格式:目标数据类型 变量名=(目标数据类型)值或者变量。
自增自减运算符++和 - -即可以放在变量的前边也可以放在变量的后边
单独使用时,++和 - -无论放在变量的前边还是后边,结果都是一样的。
参与操作时,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者- -。
参与操作时,如果放在变量的前边,先拿变量做++或者- -,后拿变量参与操作。
逻辑运算符: 短路运算符:逻辑与**&**,无论左边真假,右边都要执行。
短路与**&&,如果左边为真,右边执行;如果左边为假,右边不执行**。
逻辑或**|**,无论左边真假,右边都要执行。
短路或**||,如果左边为假,右边执行;如果左边为真,右边不执行**。
三元运算符:a>b?a:b a>b 如果为true,则值为a,否则为b
for,while, do…while三种循环的区别for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
for和while的区别条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
成员变量和局部变量的区别 构造方法:如果没有构造方法,系统将会给出一个默认的无参构造方法。
如果定义构造方法,系统将不在提供默认的构造方法。
推荐:无论是否使用,都手工写一个无参构造方法。
关键字this与super的区别 继承中的构造方法的访问特点子类中的所有构造方法默认都会访问父类中无参的构造方法。
因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要完成父类数据的初始化。
每一个子类构造方法的第一条语句默认都是super()
如果父类中没有无参构造方法,只有带参构造方法,该怎么办?
通过使用super关键字去显式的调用父类的带参构造方法
在父类中自己提供一个无参构造方法。
推荐:自己给出无参构造方法
继承中成员方法的访问特点:通过子类对象访问一个方法
子类成员范围找,父类成员范围找,如果都没有就报错(不考虑父亲的父亲….)
方法重写注意事项:私有方法不能被重写(父类私有成员子类是不能继承的)
子类方法访问权限不能更低(puclic>默认>私有)
权限修饰符 状态修饰符 final:final 关键字是最终的意思,可以修饰成员方法,成员变量,类
final 修饰的特点:
修饰方法:表名该方法是最终方法,不能被重写。
修饰变量:表明该变量是常量,不能再次被赋值
修饰类:表明该类是最终类,不能被继承。
final修饰局部变量:
变量是基本类型时,final修饰指的是基本类型的数据值不能发生改变
变量是引用类型时,final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。
状态修饰符staticstatic关键字是静态的意思,可以修饰成员方法,成员变量
static修饰的特点:
被类的所有对象共享,这也是我们判断是否使用静态关键字的条件
可以通过类名调用,当然也可以通过对象名调用。
static访问特点:
非静态的成员方法:
能访问静态的成员变量
能访问非静态的成员变量
能访问静态的成员方法
能访问非静态的成员方法
静态的成员方法:
能访问静态的成员变量
能访问静态的成员方法。
一句话就是:静态成员方法只能访问静态成员
多态概述:同一个对象在不同时刻表现出来的不同形态
多态的前提和体现:
有继承/实现关系,有方法重写,有父类引用执行子类对象。
多态中成员访问特点:
成员变量:编译看左边,执行看左边
成员方法:编译看左边,执行看右边
为什么成员变量和成员方法的访问不一样?
因为成员方法有重写,而成员变量没有。
多态的好处与弊端:
好处:提高了程序的扩展性。体现在定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作。
弊端:不能使用子类特有的功能
多态中转型:
向上转型:从子到父,父类引用指向子类对象。
向下转型:从父到子,父类引用转为子类对象。
抽象类概述:
在java中,一个没有方法体的方法应该定义为抽象方法。而类中如果有抽象方法,该类必须定义为抽象类。
抽象类特点:
抽象类和抽象方法必须使用abstract关键字修饰。
public abstract class 类名{}
public abstract void eat();
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
抽象类不能实例化。抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态。
抽象类的子类要么重写抽象类中所有的抽象方法。要么是抽象类。
抽象类的成员特点:
成员变量:可以是变量,也可以是常量。
构造方法:有构造方法,但是不能实例化。那么构造方法的作用是什么?用于子类访问父类数据的初始化
成员方法:可以有抽象方法:限定子类必须完成某些动作。也可以有非抽象方法,提高代码复用性。
接口**概述:**接口就是一种公共的标准规范,只要符合标准规范,大家都可以通用。java中的接口更多体现在对行为的抽象。
接口的特点:
接口用关键字interface修饰。public interface 接口名{}
类实现接口用implements表示。public class 类名 implements 接口名{}
接口不能实例化。接口如何实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。多态的形式:具体类多态,抽象类多态,接口多态。
多态的前提:有继承或者实现关系,有方法重写,有父(类/接口)引用指向(子/实现)类对象
接口的子类:要么重写接口中的所有抽象方法,要么是抽象类。
接口的成员特点:
成员变量:
只能是常量,默认修饰符:public static final
构造方法:
没有,因为接口主要是扩展功能的,而没有具体存在。
成员方法:
只能是抽象方法,默认修饰符:public abstract
类和接口的关系:
类和类:只能单继承,但是可以多层继承。
类和接口:可以在继承一个类的同时 实现多个接口
接口和接口:可以单继承,也可以多继承。
接口与抽象类的区别与联系https://blog.csdn.net/weixin_44226752/article/details/107339861
形参和返回值类名作为形参和返回值:
方法的形参是类名,则方法需要的是该类的对象。
方法的返回值是类型,则方法返回的是该类的对象。
抽象类名作为形参和返回值
方法的形参是抽象类名,则方法需要的是该抽象类的子类对象。
方法的返回值是抽象类名,则方法返回的是该抽象类的子类对象。
接口名作为形参和返回值:
方法的形参是接口名,其实需要的是该接口的实现类对象。
方法的返回值是接口名,其实返回的是实现该接口的实现类对象。
内部类概述: 内部类就是在一个类中定义另一个类。比如在类A 的内部定义一个类B,类B就被称为内部类。
访问特点:
内部类可以直接访问外部类的成员,包括私有。
外部类要访问内部类的成员,必须创建对象。
成员内部类:
按照内部类在类中定义的位置的不同,可以将内部类分为成员内部类和局部内部类。
成员内部类:在类的成员位置
格式:外部类名.内部类名 对象名=外部类对象.内部对象
举例:outer.inner oi=new outer().new inner()
局部内部类:在类的局部位置
局部内部类是在方法中定义的类,所以外界是无法直接使用的,需要在方法内部创建对象并使用,该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
匿名内部类
前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类。
常用APIMath类的常用方法:
| 方法名 | 说明 |
|---|---|
| public static int abs(int a) | 返回参数的绝对值 |
| public static double ceil(double a) | 返回大于或等于参数的最小double值,等于一个整数 |
| public static double floor(double a) | 返回小于或等于参数的最大double值,等于一个整数 |
| public static int round(float a) | 按照四舍五入返回最接近参数的int |
| public static int max(int a,int b) | 返回两个int值中的较大值 |
| public static int min(int a,int b) | 返回两个int值中的较小值 |
| public static double pow(double a,double b) | 返回a的b次幂的值 |
| public static double random() | 返回值为double的正值,在[0.0,1.0)范围内 |
System类的常用方法:
| 方法名 | 说明 |
|---|---|
| public static void exit(int status) | 终止当前运行的 Java 虚拟机,非零表示异常终止 |
| public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) |
Object类的概述:
Object是类层次结构的根,每个类都可以将Object作为超类,所有类都直接或者间接的继承自该类。
构造方法:public Object()
回想面向对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法?因为它们的顶级父类只有无参构造方法。
| 方法名 | 说明 |
|---|---|
| public String toString() | 返回对象的字符串表示形式。建议所有子类重写该方法,自动生成 |
| public boolean equals(Object obj) | 比较对象是否相等。默认比较地址,重写可以比较内容,自动生成 |
Arrays类的概述和常用方法
Arrays类包含用于操作数组的各种方法
| 方法名 | 说明 |
|---|---|
| public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 |
| public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
工具类的设计思想:
构造方法用private修饰,成员用public static修饰
基本类型包装类
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法来操作该数据。
常用的操作之一:用于基本数据 与字符串之间的转换。
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
以integer举例,其他的数据类型类似
Integer类的概述与使用:
Integer:包装一个对象中原始类型int的值
| 方法名 | 说明 |
|---|---|
| public Integer(int value) | 根据 int 值创建 Integer 对象(过时) |
| public Integer(String s) | 根据 String 值创建 Integer 对象(过时) |
| public static Integer valueOf(int i) | 返回表示指定的 int 值的 Integer 实例 |
| public static Integer valueOf(String s) | 返回一个保存指定值的 Integer 对象 String |
int和String的相互转换
int转String:public static String valueOf(int i) 返回int参数的字符串表示形式,该方法是String类中的方法。
String转int:Public static int parseInt(String s) 将字符串解析为int类型,该方法是Integer类中的方法。
自动装箱和拆箱
装箱:把基本数据类型转换为对应的包装类类型
拆箱:把包装类类型转换为对应的基本数据类型
Integer i=100;//自动装箱 i+=200;//i=i+200; i+200是自动拆箱 i=i+200是自动装箱
注意:在使用包装类型时,如果做操作,最好先判断是否为null,推荐只要是对象,在使用前就必须进行不为null的判断。
日期类
Date类概述和构造方法:
Date代表一个特定时间,精确到毫秒。
| 方法名 | 说明 |
|---|---|
| public Date() | 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 |
| public Date(long date) | 分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数 |
Date类的常用方法:
| 方法名 | 说明 |
|---|---|
| public long getTime() | 获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值 |
| public void setTime(long time) | 设置时间,给的是毫秒值 |
SimpleDateFormat类概述
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。
SimpleDateFormat构造方法:
| 方法名 | 说明 |
|---|---|
| public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认模式和日期格式 |
| public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 |
格式化与解析:
格式化(从Date到String )
public final String format(Date date):将日期格式化成日期/时间字符串
解析(从String到Date)
public Date parse(String source):从给定字符串的开始解析文本以生成日期
Calendar类概述:
Calendar 为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar 提供了一个类方法 getInstance 用于获取 Calendar 对象,其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();
| 方法名 | 说明 |
|---|---|
| public int get(int field) | 返回给定日历字段的值 |
| public abstract void add(int field, int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段 |
| public final void set(int year,int month,int date) | 设置当前日历的年月日 |



