欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  类库下载

JAVA中一些需要记录的知识点(基础部分)

程序员文章站 2022-03-25 08:07:18
...
JDK与JRE的区别:

JRE是所有JAVA程序运行所需要的环境,任何JAVA程序的运行都依赖于JRE,当前从JAVA官网选择安装JAVA即安装的是JRE。

JDK是为开发人员所提供的工具包,对开发人员来说属于必备项,一般在JDK本身包含JRE,但是一般JDK还会再安装一套JRE,这一套JRE被成为公共JRE(如图),JDK需要从oracle的官网下载。

当前的主流编辑器,如eclipse会找到JRE和JDK的位置,当然也可以再进行手工修改。

JAVA所需环境变量说明:

PATH:(必需)指定编译、运行java程序是所需要的程序所在路径,一般在jdk安装目录(注意是JDK!!!和JRE是不一样的!!!)下的bin文件夹中。目前常用的设置办法是先定义一个JAVA_HOME变量,在PATH中引用JAVA_HOME:%JAVA_HOME%/bin;

CLASSPATH:(之前必需,现在非必需)设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序(.class文件),现在已经不需要;

JAVA_HOME:(理论上非必需,实际必需)设置一个变量存放java程序运行所需要的程序所在路径,方便在其他地方进行引用(不用再输入一长串路径,直接使用JAVA_HOME变量即可),同时,现在不少软件也会直接调用JAVA_HOME变量,不设置容易出错。

1.java主要结构阐述

java中每一个.java文件都是一个类,一个java工程由许许多多的.java文件组成,也就是由java类组成。一般而言一个java类中主要的结构如下:

1.包申明:java类在本工程中属于哪个包,即在工程中的位置;

2.导入的包:外部库,工具;

3.公共类体(或接口)定义:类名与java文件的名称必须相同,类中内容即java文件的主要内容

4.其他:其他类的定义和接口定义。

java项目中,由外至内分别为:source文件夹、包(package)、类(.java,就是上面bb了半天的那个东西),经过编译后会将编译后的类(.class)放在与source文件夹同级的bin文件夹中。不同的source floder 中的package可以同名,相同的package中的 类 不能同名(在两个不同source floder中的相同package中也不行)

2.基本数据类型

基本数据类型8中:整型4种、浮点2种、字符、布尔;

btye最大128-1;short最大32768-1;int包含最大2开头的10位数;数值计算注意整型数值范围,记得加转换符;long数据在赋值时若整数的数值超出int的最大范围则要在整数后面加上l说明;

浮点型对于float的赋值要在小数后面加f说明;

单纯的字符型变量相加(即每个元素都是字符变量(PS.加入整形也是ascii码相加))等于把各个字符的ascii码相加;(与字符串的加法运算不同!!!字符和字符串相加得到的是字符串)

3.基础包装类

基础的常用的包装好的类有7种(一定注意大小写!!!):String、Integer、Boolean、Byte、Character、Double、Number;

4.类型转换:

char、int、double等之间可以用强制转换的方式转化,如(int)‘a’,(char)25;boolean类型变量无法由强制转换得到

各个变量与各个类之间的转换,需要通过调用各个对象的方法来实现。如:整形、字符型向String对象转换,可以使用String.valueOf();

5.常量赋值:

全局常量初始化时必须赋值;局部常量初始化时可以不赋值,但是只能赋值一次。

6.变量有效范围:

全局变量分为实例变量和静态变量(static),静态变量可以在其他类中使用 类名.变量名 的方式使用,实例变量只可在本类中使用。

局部变量只在定义变量的代码块中有效,即{}两个大括号之间,从变量申明开始算。

与局部变量同名的全局变量,在局部变量的使用范围内失效。

7.switch与if elseif的区别

两者可实现相同的功能,但从逻辑上说,if elseif必须对匹配项前面的每一个项都执行检查,而switch通过一定的查找办法去查找匹配项。在需要检查的项较多时,switch效率更高,switch另一个优势是代码清晰,但缺点是难以进行复杂操作。

8.使用foreach循环方式

使用foreach循环方式可以快速的遍历数组、对象等,具体方式:for(int x : arr){操作},但需要注意foreach形式无法对数据进行写入

9.String对象常用方法记录(按个人理解的常用程度排序,参数和具体用法未说明,下同)

length()获取字符串长度;

equals()判断字符串的内容是否相同,注意,不能直接使用等号比较,使用等号会比较内存中的位置!!!!!

replace()字符串中的子串替换;

split(),将字符串按给定的符号进行分割,保存在数组中;

toCharArray(),将字符串转换为字符数组;

trim()去除字符串前后的空格,注意,不对字符串进行更改,而是返回相应副本;

substring()截取字符字串;

toLowerCase(),toUpperCase()进行字符串的大小写转换;

indexOf(),lastIndexOf()在字符串中查找子串位置;

charAt()返回字符串中指定位置的字符;

startsWith(),endsWith()判断字符串的开始和结尾是否为指定字符串;

compareTo(),按字典顺序比较字符串;

10.Arrays对象常用方法记录(按个人理解的常用程度排序,参数和具体用法未说明)

Arrays.fill(),填充数组,可用于数组初始化、赋值;

Arrays.sort(),对数组进行排序;

Arrays.copyOf(),Arrays.copyOfRange对数组进行复制;

11.注意static关键词的使用

具体解析见技术博客:http://www.cnblogs.com/dolphin0520/p/3799052.html

在使用的时候,如要在类外部调用的方法、变量都需要加上static限制符,而带有static限制符的类(方法)若需要调用其他方法或全局变量,那么被调用的方法和全局变量也必须有static修饰(这是因为非静态变量必须要创建实例才能被调用)。一般用于不需要创建实例的类(方法),例如用作工具的类。

要区分static与权限修饰符的区别,static的目的是,在不创建实例的情况下也可使用static变量和方法,而权限修饰符则规定了该方法与变量的使用范围。

12.Java的集合类保存数据说明

Arraylist、HashMap等集合类是java中的一个特色, 但在其中只能保存引用型的数据,不能保存基本数据。即:Integer可以但int不行。

13.对于class的权限修饰符说明

对于*类(包内部第一层的类)来说,只有public修饰符可用,表示可跨包使用该类,若不用public则默认在该包内可用,一个.java文件中使用public的类至多存在一个。对于*类的内部类,其权限修饰符为private、protected、public与默认。

关于内部类的权限问题需要深入研究(比如内部类中存在private变量,需要在外部类的内部使用该变量等情况),此处暂时跳过。

14.判断一个类的两个对象是否相等

除了基础变量,引用变量(对象)不能使用两个等号==去判断值是否相等(一个类生成的两个对象是否相等),需要使用equals方法。但注意的是,一般用户定义的类的equals方法内部都是使用双等号判断的,要实现判断的效果还需要用户重载equals。(就是自己写一个方法判断)

15.基本变量对应的包装类中可能常用的方法

Integer

equals(),比较两个integer对象的值是否相等

byteValue(),intValue(),shortValue(),返回对应类型的值

toString(),将Integer对象转换为String对象(toBinaryString()、toHexString()、toOctalString()同理)

Integer.valueOf(),将String对象转换为Integer对象

Integer.parseInt(),将String对象转换为int变量。

Boolean

Byte

Character

Character.inUpperCase()、Character.inLowerCase(),判断是否为大写、小写字符

Character.toUpperCase()、Character.toLowerCase(),转换为大写、小写字符

toString(),将字符转化为字符串

Double(Float可以参考Doubel,方法是一样的)

intValue(),返回整形变量

toString(),返回字符串

Double.valueOf(),将String对象转换为Double对象

总结:需要进行基础类的转换时,可使用toString()转换成字符串,再将字符串用各个类的valueOf转换为需要的类。

16.常用数学计算方法

DecimalFormat类

当中的各个方法对数字进行格式化,得到的是字符串;

Math类

三角函数方法,可进行各类三角函数计算,包括弧度角度互换

指数函数方法,平方、平方根、立方、立方根方法等

取整函数方法,向上、向下取整,最近取整

最大值最小值绝对值

随机数方法(产生0到1之间的任意double型数值)

Random类

nextInt()返回一个整数、nextLong()返回一个长整型、nextBoolean()返回一个布尔变量、nextFloat()返回一个浮点数

17.关于方法重写(不同于重载!!!!)

重写方法时,可以修改方法的修饰符、返回值类型(参数类型、个数不可变),大多数情况下父类中的final方法不可重写(private final在子类中不可见,可重写,是比较特殊的情况)

子类方法对父类方法重写时,子类方法的修饰符必须比父类方法的修饰符权限更大;

子类对父类方法从重写时,若要修改子类方法中返回值类型,该类型必须是父类中同方法返回值的子类;

18.关于方法重写与重载的区别

在同一个类中,方法无法重写,即在一个类中不能存在两个相同方法名、参数个数、参数类型的方法,在同一个类中,方法可以重载,即一个类中允许多个相同的方法名,不同的参数类型、参数个数的方法存在。方法的重写涉及到父类、子类至少两个类,若要重写,不能修改方法的参数类型和个数,方法的重载只在一个类中发生,若要重载,必须要修改参数类型、个数。所有的父类中的方法都会在子类中被继承,所以父类与子类中存在两个方法名相同、参数不同的方法时,可以看作先被继承,后被重载。

19.抽象类(abstract关键字)

抽象类只能被继承,没有其他任何功能,而抽象类中的抽象方法在被继承后必须要进行重写,抽象方法没有方法体。若类中含有抽象方法,则该类必定为抽象类。

20.接口

接口(interface)的权限修饰符(待解决),接口中的方法均为public且不含方法体需要继承后重写,

先不管原理谈应用,接口一般使用public修饰,不加public的接口只能在同包中的不同类中使用(依然是默认的protected),加上public的接口才能跨包使用,但是只有与.java名称相同的interface才能使用public。而在接口内部,除去static、default方法,其他方法均不能有方法体。

21.对象的转型

对象转型分为向上转型和向下转型,子类对象可以一直向上转型(会自动转型),父类对象的转型要考虑其是否属于子类对象才能转(需要强制转型)。如:A a = new B();,B为A的子类,则最终a当作A类型的对象,但本质上仍是B类,父类类型的引用可以调用父类中定义的所有属性和方法,对于只存在与子类中的方法和属性它就望尘莫及了,即a可以调用B类型中从A类继承到的方法和属性,但不能调用B类中独有的方法和属性。在方法调用时同理,假设C继承于B继承于A,则C类型对象c在调用类中某一方法时,会在可用范围内(可用范围参考上一句)先查找以C类型为参数的方法重载版本,若不存在,则向上转型为B并查找B类型为参数的方法重载版本,直至找到可执行的方法重载版本,若不存在,则无法调用,会报错。

22.关于类包

在实际开发中,应为所有的类指定类包,包的声明必须是文件中第一行非注释代码,所有类包均为小写字母构成。导入包时,若使用*来导入包中的所有类,则并不会导入子类,如需要导入子类还需要重新import。使用import static 可以导入类当中的静态成员。

23.关于常量

final定义的常量分类局部常量和全局常量,局部常量在其生命周期内不能重定义,但是需要的话可在每次创建的时候都可以赋新值,全局常量一般使用public static final,在程序运行期间,全局常量的值都不会被改变。

PS:

多态没能理解透彻,待深入

接口的权限修饰符未能理解透彻,待深入

JDK与JRE的区别:

JRE是所有JAVA程序运行所需要的环境,任何JAVA程序的运行都依赖于JRE,当前从JAVA官网选择安装JAVA即安装的是JRE。

JDK是为开发人员所提供的工具包,对开发人员来说属于必备项,一般在JDK本身包含JRE,但是一般JDK还会再安装一套JRE,这一套JRE被成为公共JRE(如图),JDK需要从oracle的官网下载。

当前的主流编辑器,如eclipse会找到JRE和JDK的位置,当然也可以再进行手工修改。

JAVA所需环境变量说明:

PATH:(必需)指定编译、运行java程序是所需要的程序所在路径,一般在jdk安装目录(注意是JDK!!!和JRE是不一样的!!!)下的bin文件夹中。目前常用的设置办法是先定义一个JAVA_HOME变量,在PATH中引用JAVA_HOME:%JAVA_HOME%/bin;

CLASSPATH:(之前必需,现在非必需)设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序(.class文件),现在已经不需要;

JAVA_HOME:(理论上非必需,实际必需)设置一个变量存放java程序运行所需要的程序所在路径,方便在其他地方进行引用(不用再输入一长串路径,直接使用JAVA_HOME变量即可),同时,现在不少软件也会直接调用JAVA_HOME变量,不设置容易出错。

1.java主要结构阐述

java中每一个.java文件都是一个类,一个java工程由许许多多的.java文件组成,也就是由java类组成。一般而言一个java类中主要的结构如下:

1.包申明:java类在本工程中属于哪个包,即在工程中的位置;

2.导入的包:外部库,工具;

3.公共类体(或接口)定义:类名与java文件的名称必须相同,类中内容即java文件的主要内容

4.其他:其他类的定义和接口定义。

java项目中,由外至内分别为:source文件夹、包(package)、类(.java,就是上面bb了半天的那个东西),经过编译后会将编译后的类(.class)放在与source文件夹同级的bin文件夹中。不同的source floder 中的package可以同名,相同的package中的 类 不能同名(在两个不同source floder中的相同package中也不行)

2.基本数据类型

基本数据类型8中:整型4种、浮点2种、字符、布尔;

btye最大128-1;short最大32768-1;int包含最大2开头的10位数;数值计算注意整型数值范围,记得加转换符;long数据在赋值时若整数的数值超出int的最大范围则要在整数后面加上l说明;

浮点型对于float的赋值要在小数后面加f说明;

单纯的字符型变量相加(即每个元素都是字符变量(PS.加入整形也是ascii码相加))等于把各个字符的ascii码相加;(与字符串的加法运算不同!!!字符和字符串相加得到的是字符串)

3.基础包装类

基础的常用的包装好的类有7种(一定注意大小写!!!):String、Integer、Boolean、Byte、Character、Double、Number;

4.类型转换:

char、int、double等之间可以用强制转换的方式转化,如(int)‘a’,(char)25;boolean类型变量无法由强制转换得到

各个变量与各个类之间的转换,需要通过调用各个对象的方法来实现。如:整形、字符型向String对象转换,可以使用String.valueOf();

5.常量赋值:

全局常量初始化时必须赋值;局部常量初始化时可以不赋值,但是只能赋值一次。

6.变量有效范围:

全局变量分为实例变量和静态变量(static),静态变量可以在其他类中使用 类名.变量名 的方式使用,实例变量只可在本类中使用。

局部变量只在定义变量的代码块中有效,即{}两个大括号之间,从变量申明开始算。

与局部变量同名的全局变量,在局部变量的使用范围内失效。

7.switch与if elseif的区别

两者可实现相同的功能,但从逻辑上说,if elseif必须对匹配项前面的每一个项都执行检查,而switch通过一定的查找办法去查找匹配项。在需要检查的项较多时,switch效率更高,switch另一个优势是代码清晰,但缺点是难以进行复杂操作。

8.使用foreach循环方式

使用foreach循环方式可以快速的遍历数组、对象等,具体方式:for(int x : arr){操作},但需要注意foreach形式无法对数据进行写入

9.String对象常用方法记录(按个人理解的常用程度排序,参数和具体用法未说明)

length()获取字符串长度;

equals()判断字符串的内容是否相同,注意,不能直接使用等号比较,使用等号会比较内存中的位置!!!!!

replace()字符串中的子串替换;

split(),将字符串按给定的符号进行分割,保存在数组中;

toCharArray(),将字符串转换为字符数组;

trim()去除字符串前后的空格,注意,不对字符串进行更改,而是返回相应副本;

substring()截取字符字串;

toLowerCase(),toUpperCase()进行字符串的大小写转换;

indexOf(),lastIndexOf()在字符串中查找子串位置;

charAt()返回字符串中指定位置的字符;

startsWith(),endsWith()判断字符串的开始和结尾是否为指定字符串;

compareTo(),按字典顺序比较字符串;

10.Arrays对象常用方法记录(按个人理解的常用程度排序,参数和具体用法未说明)

Arrays.fill(),填充数组,可用于数组初始化、赋值;

Arrays.sort(),对数组进行排序;

Arrays.copyOf(),Arrays.copyOfRange对数组进行复制;

11.注意static关键词的使用

具体解析见技术博客:http://www.cnblogs.com/dolphin0520/p/3799052.html

在使用的时候,如要在类外部调用的方法、变量都需要加上static限制符,而带有static限制符的类(方法)若需要调用其他方法或全局变量,那么被调用的方法和全局变量也必须有static修饰(这是因为非静态变量必须要创建实例才能被调用)。一般用于不需要创建实例的类(方法),例如用作工具的类。

要区分static与权限修饰符的区别,static的目的是,在不创建实例的情况下也可使用static变量和方法,而权限修饰符则规定了该方法与变量的使用范围。

12.Java的集合类保存数据说明

Arraylist、HashMap等集合类是java中的一个特色, 但在其中只能保存引用型的数据,不能保存基本数据。即:Integer可以但int不行。

13.对于class的权限修饰符说明

对于*类(包内部第一层的类)来说,只有public修饰符可用,表示可跨包使用该类,若不用public则默认在该包内可用,一个.java文件中使用public的类至多存在一个。对于*类的内部类,其权限修饰符为private、protected、public与默认。

关于内部类的权限问题需要深入研究(比如内部类中存在private变量,需要在外部类的内部使用该变量等情况),此处暂时跳过。

14.判断一个类的两个对象是否相等

除了基础变量,引用变量(对象)不能使用两个等号==去判断值是否相等(一个类生成的两个对象是否相等),需要使用equals方法。但注意的是,一般用户定义的类的equals方法内部都是使用双等号判断的,要实现判断的效果还需要用户重载equals。(就是自己写一个方法判断)

15.基本变量对应的包装类中可能常用的方法

Integer

equals(),比较两个integer对象的值是否相等

byteValue(),intValue(),shortValue(),返回对应类型的值

toString(),将Integer对象转换为String对象(toBinaryString()、toHexString()、toOctalString()同理)

Integer.valueOf(),将String对象转换为Integer对象

Integer.parseInt(),将String对象转换为int变量。

Boolean

Byte

Character

Character.inUpperCase()、Character.inLowerCase(),判断是否为大写、小写字符

Character.toUpperCase()、Character.toLowerCase(),转换为大写、小写字符

toString(),将字符转化为字符串

Double(Float可以参考Doubel,方法是一样的)

intValue(),返回整形变量

toString(),返回字符串

Double.valueOf(),将String对象转换为Double对象

总结:需要进行基础类的转换时,可使用toString()转换成字符串,再将字符串用各个类的valueOf转换为需要的类。

16.常用数学计算方法

DecimalFormat类

当中的各个方法对数字进行格式化,得到的是字符串;

Math类

三角函数方法,可进行各类三角函数计算,包括弧度角度互换

指数函数方法,平方、平方根、立方、立方根方法等

取整函数方法,向上、向下取整,最近取整

最大值最小值绝对值

随机数方法(产生0到1之间的任意double型数值)

Random类

nextInt()返回一个整数、nextLong()返回一个长整型、nextBoolean()返回一个布尔变量、nextFloat()返回一个浮点数

17.关于方法重写(不同于重载!!!!)

重写方法时,可以修改方法的修饰符、返回值类型(参数类型、个数不可变),大多数情况下父类中的final方法不可重写(private final在子类中不可见,可重写,是比较特殊的情况)

子类方法对父类方法重写时,子类方法的修饰符必须比父类方法的修饰符权限更大;

子类对父类方法从重写时,若要修改子类方法中返回值类型,该类型必须是父类中同方法返回值的子类;

18.关于方法重写与重载的区别

在同一个类中,方法无法重写,即在一个类中不能存在两个相同方法名、参数个数、参数类型的方法,在同一个类中,方法可以重载,即一个类中允许多个相同的方法名,不同的参数类型、参数个数的方法存在。方法的重写涉及到父类、子类至少两个类,若要重写,不能修改方法的参数类型和个数,方法的重载只在一个类中发生,若要重载,必须要修改参数类型、个数。所有的父类中的方法都会在子类中被继承,所以父类与子类中存在两个方法名相同、参数不同的方法时,可以看作先被继承,后被重载。

19.抽象类(abstract关键字)

抽象类只能被继承,没有其他任何功能,而抽象类中的抽象方法在被继承后必须要进行重写,抽象方法没有方法体。若类中含有抽象方法,则该类必定为抽象类。

20.接口

接口(interface)的权限修饰符(待解决),接口中的方法均为public且不含方法体需要继承后重写,

先不管原理谈应用,接口一般使用public修饰,不加public的接口只能在同包中的不同类中使用(依然是默认的protected),加上public的接口才能跨包使用,但是只有与.java名称相同的interface才能使用public。而在接口内部,除去static、default方法,其他方法均不能有方法体。

21.对象的转型

对象转型分为向上转型和向下转型,子类对象可以一直向上转型(会自动转型),父类对象的转型要考虑其是否属于子类对象才能转(需要强制转型)。如:A a = new B();,B为A的子类,则最终a当作A类型的对象,但本质上仍是B类,父类类型的引用可以调用父类中定义的所有属性和方法,对于只存在与子类中的方法和属性它就望尘莫及了,即a可以调用B类型中从A类继承到的方法和属性,但不能调用B类中独有的方法和属性。在方法调用时同理,假设C继承于B继承于A,则C类型对象c在调用类中某一方法时,会在可用范围内(可用范围参考上一句)先查找以C类型为参数的方法重载版本,若不存在,则向上转型为B并查找B类型为参数的方法重载版本,直至找到可执行的方法重载版本,若不存在,则无法调用,会报错。

22.关于类包

在实际开发中,应为所有的类指定类包,包的声明必须是文件中第一行非注释代码,所有类包均为小写字母构成。导入包时,若使用*来导入包中的所有类,则并不会导入子类,如需要导入子类还需要重新import。使用import static 可以导入类当中的静态成员。

23.关于常量

final定义的常量分类局部常量和全局常量,局部常量在其生命周期内不能重定义,但是需要的话可在每次创建的时候都可以赋新值,全局常量一般使用public static final,在程序运行期间,全局常量的值都不会被改变。

PS:

多态没能理解透彻,待深入

接口的权限修饰符未能理解透彻,待深入