之前自己归纳的一些Java基础知识点,分享一下,顺便自己回顾复习一下。
Java基础
JDK安装和配置
1、环境变量JAVA_HOME(操作系统中用来指定操作系统运行环境的变量)变量值:C:\Program Files\Java\jdk1.7.0_04(安装jdk的目录)
2、变量classpath(操作系统在哪些目录下可以找到您所要执行的Java程序所需要的类或者包)变量值: %JAVA_HOME%\lib;
3、jdk目录组成:
- lib:java类库文件。
- bin:JDK中一些用于java开发的一些可执行文件。
- include:c语言的头文件,用于支持java原生接口和java虚拟机调试接口的一些原生代码程序。
- jre:存放Java运行时环境的根文目录,这个运行时环境是java包的一个实现。
- db:纯Java开发的数据,是一个开源的Java开发的关系数据库。
命令行工具(JDK提供的)
1、 javac – 编译器,将源代码程序编译成为字节码文件。
2、 jar – 打包工具,将相关的字节码文件打包成一个jar文件。
3、 javadoc – 文档生成器,从源代码注释中提取信息,并生成文档,以便于查看。
- “javadoc -d” 指定输出文档的存放的目录
- "javadoc ."表示当前的目录
- "javadoc -version"用来指定输出文档中需包含版本信息
- "javadoc -author"用来指定输出文档中需包含作者信息
4、 jdb – debugger,调试工具。
5、 java – 运行编译后的java程序。
6、 appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
7、 javah:是java语言 C 头文件和存根文件生成器。
8、 javap:Java反编译工具,显示编译类文件中的可访问功能和数据,可用于分析代码。
9、 jconsole:进行系统调试和监控的工具。
Java八种基本数据类型
1、byte 8位(1字节)
2、short 16位(2字节)
3、int 32位(4字节)
4、long 64位(8字节)
5、float 32位(4字节)
6、double 64位(8字节)
7、char 16位(2字节)
8、boolean 1位
用于高精度计算的非基本数据类型的数字类
1、BigInteger——任意大的整数,可用于密码学计算等。
- BigInteger a = new BigInteger(“1”) 相当于 BigInteger a = BigInteger.ONE;
2、BigDecimal——任意精度的定点实数,可用于精确的货币计算等。
- BigDecimal c = 数字1.divide(数字2,20,BigDecimal.ROUND_UP);
3、NumberFormat
变量命名规范
1、标识符可从一个字母、下划线(_)或美元符号($)开始,随后也可跟数字。标识符是大小写区别对待的并且未规定最大长度。
数组
数组:保存多个相同类型的变量的顺序集合,这些变量在数组中以列表的形式存在。
- 数组排序:选择排序
- 数组查找:1、二分法 2、线性查找
- 数组复制:1、循环复制 2、System.arraycopy 3、clone方法
- 可变长参数列表:只能有一个且只能是最后一个参数,返回类型不能是可变参数。
- 数组被看作是对象,因为数组是用new操作符创建的,数组变量实际上是一个包含数组引用的变量。
访问修饰符
1、public(该类或非该类均可访问)
2、protected(该类及其子类的成员可以访问,同一个包中的类也可访问)
3、默认(相同数据包中的类可以访问)
4、private(只有该类可以访问)
abstract抽象类
1、抽象类不能被实例化
2、构造方法和static方法不能是抽象的
3、父类的抽象方法往往在子类中实现
4、抽象类可以具有指向子类对象的对象引用
5、抽象类和接口区别
- 接口只能有抽象方法,抽象类可以有非抽象方法。
- 接口的instanceof的使用
- 接口不可以定义静态方法,抽象可以。
- 接口里面不可以有构造函数和初始化块
- 5.类可以实现多个接口,但是只能继承一个抽象
StringBuffer和StringBuilder的区别
1、StringBuffer线程同步,安全,效率较低
2、StringBuilder不同步,效率高,但是多线程使用时可能会有问题。
3、构建器的容量(不增加时候的长度 capacity())和长度(实际)
4、setLength();会截取 trimToSize();缩小到实际长度
重载和重写
1、重载:参数类型,个数,顺序至少有一个不相同,方法名必须相同,存在于同类中。
2、重写:方法名,参数,返回值相同,子类不能缩小访问权限,存在于父类和子类,fina修饰方法不能重写
ArrayList和LinkList的区别
1、ArrayList(ArrayList 增长当前长度的50%,多线程情况不使用)
- 优点:1.节省空间 2.访问快
- 缺点:1.进行插入删除操作的效率低 2.需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢出
2、LinkList
- 优点:1.插入,删除操作快 2.不需要预先分布连续的存储空间
- 缺点:1.要占用额外的存储空间存储元素之间的关系,存储密度降低。2.链表不是一种随机存储结构,不能随机存取元素。
Set和List区别
1、Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。
Map四种遍历方式:
1、通过key值,使用for (String key : map.keySet())
2、如代码段:
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
3、如代码段:
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet())
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
4、如代码段:
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v); }
}
内部类:(内部类和外部类不存在继承)
1、成员内部类 :外部类名.内部类名 对象名 = new 外部类名.new内部类名()
2、静态内部类 :外部类名.内部类名 对象名 = new 外部类名.内部类名()
3、方法内部类 :局部内部类在访问局部变量时,被访问的变量必须用 final 修饰
4、匿名内部类 :适用于一个对象只使用一次的场景,使用完毕就回收
小贴士
1、JDK 7之后整型数据可以“int a=2_147_483_647”这样赋值。
2、&&:如果在判断时得到的结果是false时,那么后面的计算就不会继续;||:如果在判断时得到的结果是true,那么后面的计算也不会继续。
3、按位与& 按位或& 按位异或^ 求反~ 左移<< 右移>>
4、运算符的优先级:括号、自加/减运算符(++,–,!)、 算术运算符(+,-,*,/)、比较运算符、逻辑运算符(&,|,^,||,&&)、赋值运算符(+=,?:,…)。
5、JDK 7 以后switch可以使用String作为判断条件。
6、面向对象思想简单概括起来就是三个:封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。
7、static不依赖类特定的实例,被类的所有实例共享,静态方法不能访问类中的实例成员。
8、final修饰类,类不可以被继承。final修饰方法可以继承但是不可以重写。
9、字符串方法concat()可拼接
10、ArrayList遍历三种方式:
- foreach
- 转换成数组
- Iterator
Java基础篇已分享完成,整理得有些乱,主要是一些基础和容易遗忘的知识归纳,如果有错误的地方,欢迎指出。