1.JAVA中的相对路径
file = new file("")与file = new file("./")方式相同,该路径为整个project的根目录(实际上为java虚拟机启动路径)。
利用..可以返回上一层目录,file = new file("../")即project根目录的上一层目录。
可以利用Syetem.getProperty("user.dir")获得project目录,实际上相对路劲的基本目录即Syetem.getProperty("user.dir")的目录
2.利用System.getProperty()获得相关信息
获得如操作系统的版本、文件分隔符、用户主目录、用户当前工作目录等信息,具体附表。
3.Iterator和Iterable
Iterator接口只有三个方法,next(),hasnext(),remove(),在实际中都需要进行实现。
对于List类,其实现了ListIterator接口,其中包含previous()、haspervious()、set()、add()等方法
Iterator和Iterable 的区别究竟在哪?
4.一个函数需要返回的类型不是一个类而是一个接口
当某个函数需要返回一个类,比如String时,我们可以new一个String返回,但当需要的返回值是一个接口时,比如Iterable,这时候可以返回某个已经实现了改接口的类,比如需要Iterable类型就可以返回一个arraylist。
5.程序运行时的内存设置
-Xmn、-Xms初始空间、-Xmx最大空间
Eclipse中的设置方法:打开eclipse,选择Window--Preferences--Java--Installed JREs,在右边选择前面有对勾的JRE,单击Edit,出现一个EditJRE的对话框,在其中的Default VM Arguments框中输入-Xms128m -Xmx512m
6.List引用变脸与ArrayList引用变量的区别
目前可以使用List<e> a = new ArrayList<e>();来定义一个arraylist也可以使用ArrayList<e> a = new ArrayList<e>();来定以一个arraylist;
使用前者的优势在与重构时方便(比如arraylist要改为linklist,重构的目的是两者执行效率不同),但是必须放弃一些Arraylist独有的属性与方法(正是后者的优势)。
7.枚举类型的相关知识
枚举类型用于替代常量,其通过enum关键词进行定义。基本情况下,枚举类型中每个值的具体取值由编译器自动分配,如果要加入额外的信息的话则需要定义相应的变量和构造函数。每一个枚举类型是其Enum抽象类的子类,而枚举类型中的每一个值其实是枚举类型的一个匿名子类。
8.程序运行时内存相关状况
程序运行时内存相关状况可使用Runtime.getRuntime()中的相关方法获得,maxMemory()方法获得当前进程可获得的最大的内存值,totalMemory()方法获得当前进程已获得的内存值(不够用的时候会再向系统申请),freeMemory()方法获得当前进程所获得的剩余内存。当前时刻所占内存可使用totalMemory()-freeMemory()获得。单位为字节。
9.java8中lambda表达式常用方法和相关类
lambad表达式,用于替代原来的 函数式接口(需要重写函数式接口方法),
常用的 方法-函数式接口-待重写方法 组合有——
forEach-Consumer-accept
filter-Predicate-apply
sorted(sort)-Compartor-compare
min(max)-Compartor-compare
map-Function-apply(map方法将集合类中的类型转化为任意一种可转化的类型)
在lambda表达式中若使用外部类中的变量,则参考内部类使用外部类中的变量的方法,即外部类中的变量必须是final变量,而在java8中,这一条件被放宽,即可以不是final变量,但对其的操作使用都是按照final变量来对待的。
可以使用summaryStatistics()方法对流中的元素进行统计,如IntSummaryStatistics
10.java8中的steam操作
java8中为集合类提供了steam操作,可以使用链式代码对集合类进行操作,如sorted、filter等,也可以使用get、collect方法等进行收集;同时,存在parallelStrem可进行并行操作
11.内部类中的变量(域)
在内部类中使用内部类的变量,直接使用即可;在内部类中使用外部类的变量,若外部类变量不与内部类重名,则直接使用,若外部类变量与内部类重名,则使用 外部类名.this.外部类变量名 的方式使用。注意:外部类名.变量名 的方式只可以在内部类中引用外部类的静态变量。
12.利用内部类实现多个key的hashmap
可以在需要使用多个hashmap的代码段中加入一个内部类,如:pair,pair中包含域key1、key2、key3……,可使用pair对象作为hashmap的key,可酌情重写equals和hashcode
13.HashMap源码部分详解(JDK8)
put方法需要参数key和value,会在内部调用putval方法,并将内容以Node类的数组形式保存,暂且成为table对象(Node为HashMap的静态内部类,实现了Map.Entry接口,是一个链式数据结构),大致流程如下:
1.检查table对象是否存在或是否为空,若不存在或为则建立新table;
2.根据需要保存对象的key的hashcode得到该对象在table这个数组中应该保存的位置index;
2.1若index为空,则新建node保存在index位置,执行3;
2.2若index位置存在对象,则利用需要保存对象的key的equals方法进行比较是否相等;
2.2.1若需要保存的对象和已存在对象的key相等,则执行2.2.3;
2.2.2若不相等则依次检查与后续的每一个node对象key是否相等;
2.2.2.1若找到相等,则跳出检查,执行2.2.3;
2.2.2.2若遍历所有node的key均未找到相等,则新建node保存在index位置,执行3;
2.2.3利用新的value替换旧的 value,并return旧的value;结束!
3.检查保存新节点后table大小是否够用,若够,直接返回null,若不够,则对table进行resize后返回null;结束!
综上,hashmap底层利用了一个链表数组的结构,逻辑上可约等于一个二维数组,其中第一纬可为空,第二纬长度不定,保存时先利用hashcode找到位置,后酌情进行碰撞检测
14.关于循环引用问题
尽量减少循环引用以减少不必要的麻烦,例如:当a、b两个对象互相引用时,执行其中任一对象的hashcode方法会导致stack overflow,a调用hashcode则需要计算所有a内部所引用对象的hashcode(包括b),在计算b的hashcode时有需要计算所有b内部所引用对象的hashcode(包括a),由此引发死循环,导致栈溢出。
15.关于String占内存长度及位置的情况
String占内存长度的情况与所使用编码相关,一般在windows中,默认使用gbk,则中文2字节,英文1字节,若使用Unicode编码格式中,UTF8中文3字节英文1字节,UTF16中文3字节英文2字节。
JAVA程序运行时,jvm数据空间可被分为6个区域,String字符串一般保存在方法区中的常量区和堆中,在编译阶段可以确定的字符串会被进常量区(直接的字符串计算,如“a”+“b”,字符串和变量结合就不行),而在运行时才能知道具体取值的字符串将会被丢进堆内存,而在运行时也有string.intern()这样的方法可以将字符串丢进常量区。
- JAVA 中LinkedHashMap要点记录
JAVA 中LinkedHashMap要点记录 构造函数中可能出现的几个参数说明如下: 1.initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16 2.loadFactor ...
- java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...)
目录 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...) Java书写规范 IDEA的一些常用快捷键 Java类中作为成员变量的类 Java源文件中只能有一个public类 Java中 ...
- 【Java基础】Java中你必须知道的知识点
目录 Java中面向对象的基础知识 1. 什么是面向对象 2. 三大基本特征和五项基本原则 3. Java的平台无关性 4. 值传递和引用传递 5. 方法重载和重写 6. 基本数据类型 7. 包装类 ...
- slf4j+log4j在Java中实现日志记录
小Alan今天来跟大家聊聊开发中既简单又常用但必不可少的一样东西,那是什么呢?那就是日志记录,日志输出,日志保存. 后面就统一用日志记录四个字来形容啦. 日志记录是项目的开发中必不可少的一个环节,特别 ...
- Java中容易遗漏的小知识点( 一 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)
笔者csdn博客同文地址:https://blog.csdn.net/weixin_45791445/article/details/106597515 我是小康小白,一个平平无奇的Java小白.热爱 ...
- JAVA 中日志的记录于使用
java中常用的日志框架 日志接口 Commons Logging Apache Commons Logging是一个基于Java的日志记录实用程序,是用于日志记录和其他工具包的编程模型.它通过其他一 ...
- Java中main()的args的知识点浅谈
我们先来了解下Java中main()方法的默认定义格式: public static void main(String[] args){ }1.main方法是程序执行的入口,除了args这个形参变量可 ...
随机推荐
- filter 和 struts 拦截器的区别
观点1: 比较一,filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别. 比较二,fi ...
- 【转】Linux 上的最佳 C/C++ IDE
IDE介绍收藏篇: 个人linux下开发经验不多,一般也都使用shell远程连接使用命令行模式开发.如果自己在自己机器上开发还是有IDE要方便很多,看到这篇帖子就果断的转过来先收藏下,之前自己使用过E ...
- 【转】gvim配置及相关插件安装
0.准备软件及插件.(a)gvim72.exe 地址ftp://ftp.vim.org/pub/vim/pc/gvim72.exe.(b)vimcdoc-1.7.0-setup.exe 地址http: ...
- uboot移植前奏
Tiny4412开发板硬件版本为: 底板: Tiny4412/Super4412SDK 1506 核心板:Tiny4412 - 1412 1.下载u-boot源代码,建立u ...
- EasyUI--datebox设置默认时间
1. html代码: <input id="txtBeginTime" class="easyui-datebox" data-options=" ...
- EF 实体字段设置主键和自增
[Key] //主键 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //设置自增 public int id { get; set; } ...
- reg 正则
//转化为camel形式 var text = 'border-color-base'; text.replace(/-(\w{1})/g, function (match, chr1) { retu ...
- python 自动化运维项目_目录
微信小程序监控界面 CMDB 跳板机 代码上线系统 网站用户访问质量监测 分布式监控 Docker自动化管理平台 Openstack二次开发
- spark Intellij IDEA开发环境搭建
(1)创建Scala项目 File->new->Project,如下图 选择Scala 然后next 其中Project SDK指定安装的JDK,Scala SDK指定安装的Scala(这 ...
- Bmob 之 简单使用
1. pod pod 'BmobSDK' 与 pod "BmobSDK" 好像没什么区别 2. 导入 在AppDelegate中: #import <BmobSDK/Bmob ...