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

为了准备一年以后的校招,开始重头在复习一遍JAVA,为了方便初学者或者其他在整理基础知识的朋友,发个日志,欢迎讨论,并指出错误,谢谢!

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:

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

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

时间: 2024-10-11 03:20:31

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

java中的List记录是否完全匹配方法

今天要说的是给List分组,然后用Map来封装,可能你看了以后还是有一些模糊. 先看一下项目结构图: User类是一个VO类,主要逻辑还是在MapTestBak上面. 运行效果: 原理图: 1.在starsList中有两组人,共三人 2.在dolList中有一组人,共两人 3.经过marched操作,最后匹配到一组人到result中.即第一组人. 原理很简单. =================================================== 源码部分: ==========

Java中执行存储过程和函数(web基础学习笔记十四)

一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableStatement 接口包含有Statement 接口和PreparedStatement 接口定义的全部方法,但是并不是所有的方法我们都要使用,主要使用的方法有这样几个: CallableStatement 常用方法: 返回类型 方法签名 说明 boolean execute() 执行 SQL 语句

关于Java中基本类型的长度相关基础知识

1.  用HeapByteBuffer放int占几个byte? 占4个.而且不论你是放1还是-1还是0xffff. 因为int的长度是4个byte,HeapByteBuffer的存储又是byte数组. 2. 用HeapByteBuffer放char占几个byte? 同1,是两个,因为java中char的长度是2byte. 同样,不论是存英文字符还是存中文字符,都占用2个byte. 示例代码 ByteBuffer buff = ByteBuffer.allocate(1024*1024); buf

Java中main()的args的知识点浅谈

我们先来了解下Java中main()方法的默认定义格式: public static void main(String[] args){ }1.main方法是程序执行的入口,除了args这个形参变量可以改变外,其他都不能改变. 2.JVM为什么这么定义? 因为JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用,因此需要是限制为public static. JVM规定,不能有返回值,所以返回值类型为void. main()方法中必须有一

java中string内存的相关知识点

(一):区别java内存中堆和栈: 1.栈:数据可以共享,存放基本数据类型和对象的引用,其中对象存放在堆中,对象的引用存放在栈中: 当在一段代码块定义一个变量时,就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用. 2.堆:存放用new产生的数据,其中清理垃圾采用垃圾回收机制. 在堆中产生了一个数组或对象后,还可以 在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了

java中开源日志记录工具log4j

日志:除了能记录异常信息,还可以记录程序正常运行时的关键信息. 使用log4j来进行日志文件记录经典步骤: 001.在项目中创建一个lib文件夹,然后将下载好的jar包copy到该文件夹下 002.对已经copy过来的jar包,点击右键,然后执行下图操作, 项目中就会多出一个引入外部Library的项目 003.在src目录下创建一个名称为log4j.properties文件 004.编写,粘贴已经写好的配置文件内容,编码方式可以做下修正.对配置文件点击右键→属性→other→utf-8,然后应

Java中比较容易混淆的知识点

1.  equals()  和  ==  运算符 - equals是方法, 而==是运算符(当然也可以说是广义上的方法, 或者最终都是调用方法). - equals() 是从Object类中继承来的, 在Object中 equals是直接调用的 ==运算符. - 在equals中, 怎么比较, 可以自己定义, 而 == 运算符是直接比较的变量中直接存放的值. - 对于8种基本类型而言, 变量内存放的就是值, 所以使用 == 运算符比较的时候是比较它们的值(不同的基本类型也可以比较, 如 int

Java中使用Log4j记录错误、输出日志

简介: Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 官方站点:http://logging.apache.org/log4j/ Log4j配置: 第一步:

java 中的锁 -- 偏向锁、轻量级锁、重量级锁

理解锁的基础知识 如果想要透彻的理解java锁的来龙去脉,需要先了解以下基础知识. 基础知识之一:锁的类型 锁从宏观上分类,分为悲观锁与乐观锁. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作. java中的乐观锁基本都是通过CAS操作实现的,CAS