Think in java备忘录
1..new在内部类中的使用
.new可以用使用外部类对象创建一个内部类,对象
DotNew.java
package com.gxf.innerclass; public class DotNew {
class InnerClass{ //定义内部类
public String toString(){
return "this is InnerClass";
}
}
public static void main(String[] args) {
DotNew dtn = new DotNew();
InnerClass inc = dtn.new InnerClass(); //使用外部类 + .new实例化内部类
System.out.println(inc);
} }
必须使用外部类实例来实例化内部类对象,不能直接new 外部类名.内部类名,如上面的dtn.new DotNew.InnerClass()
2.java System.arraycopy()函数只能改变数组内容,不能改变数组大小
package com.gxf.ArrayTest; public class Test {
public static void main(String []args){
int dest[] = new int[]{1,2,3,4,5};
int src[] = new int[]{6,7,8};
System.arraycopy(src, 0, dest, 0, src.length); //System.arraycopy()只能改变数组中的内容不能改变数组的大小
showArray(dest);
}
private static void showArray(int []num){
for(int i = 0; i < num.length; i++){
System.out.println(num[i] + " ");
}
}
}
output:
6
7
8
4
5
3.java主线程退出,守护线程不会退出
这里创建通过主线程创建了一个子线程,子线程每一秒输出一个数字并且无线循环。
ThreadExit.java
/**
* 测试主线程退出,子线程是否退出
* @author Administrator
*
*/
public class ThreadExit { //子线程每秒向控制台输出一个数字
class MyThread extends Thread{
int count = 0;
public void run(){
while(true){
System.out.println("count = " + count ++);
System.out.println("当前线程名称: " + Thread.currentThread().getName());
try {
Thread.sleep(1000); } catch (InterruptedException e) {
e.printStackTrace();
}//catch
}//while
}//run
}//class public static void main(String args[]){
ThreadExit threadExit = new ThreadExit();
MyThread myThread = threadExit.new MyThread();
myThread.start(); //启动线程
System.out.println("当前线程名称: " + Thread.currentThread().getName());
}
}
这里并不能说明主线程已退出,注意这里说的是主线程,不是进程。
使用jps和jstack这两个工具可以看到进程中堆栈信息,这里我暂时成为堆栈信息
信息有点长就不贴出来了,从信息中可以看出,主线程是退出了,子线程并没有退出。
这个好像和c/c++有点不同
4.Iterator.remove()
API文档中是这样写的
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的 collection,则迭代器的行为是不确定的。
这里我的理解是返回最后一个next所指的元素
下面的代码中我用了一个list放了10,用Iterator来遍历list。如果5 = iterator.next(),调用iterator.remove()方法,通过最后输出list可以看出5被删除了
package com.gxf.collection; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class TestForIterator {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 1; i <= 10;i++){
list.add(i);
}//for
System.out.println(list); Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
int temp = iterator.next();
if(temp == 5)
iterator.remove(); //5从list中删除了
}//while System.out.println(list);
}
}
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 6, 7, 8, 9, 10]
5.随机种子相同,产生的随机数是一样的
package com.gxf.test; import java.util.Random; public class Test {
public static void main(String[] args) {
Random random1 = new Random(1);
Random random2 = new Random(1); System.out.println(random1.nextInt());
System.out.println(random2.nextInt());
}
}
output:
-1155869325
-1155869325
6.类什么时候被加载/类加载时机:
第一:生成该类对象的时候,会加载该类及该类的所有父类;
第二:访问该类的静态成员的时候;
第三:class.forName("类名");
7.java中的三种类加载器
其实在java中有三种类类加载器。
1)Bootstrap ClassLoader 此加载器采用c++编写,一般开发中很少见。
2)Extension ClassLoader 用来进行扩展类的加载,一般对应的是jre\lib\ext目录中的类
3)AppClassLoader 加载classpath指定的类,是最常用的加载器。同时也是java中默认的加载器。
这是从CSDN上面看到的,感觉是正确的,待验证
Think in java备忘录的更多相关文章
- JAVA备忘录
本文主要是记录一下JAVA: 1.Arrays.的几个用法: fill:数组全部置一个数 sort:排序 binarySearch:二分查找 2.Map的用法: Map<Integer,Inte ...
- 重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 实现不了是研发的借口? 实现不了,有时候是功能复杂度较高难以实 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 设计模式03备忘录(java)
先贴代码有空来写内容. 备忘录1 //简单的备忘录,只可以记录上一次修改前的状态,实现撤回一次的操作. class Student{ private String name; private Stri ...
- JAVA 设计模式 备忘录模式
用途 备忘录模式 (Memento) 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. 这样以后就可将该对象恢复到原先保存的状态. 备忘录模式是一种行为型模式. 结构
- Head First 设计模式系列之二----备忘录模式(java版)
申明:这几天无意中关注到备忘录模式,比较陌生回家一番参考书,只在附录里记录了该模式.后来在园子里有发现了有专门写设计模式的博客,并且写的也得牛逼.附上链接 http://www.cnblogs.com ...
- [译]Java 设计模式之备忘录
(文章翻译来自Java Design Pattern: Memento) memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态. 在将来时空旅行将成为显示 ...
- java设计模式---备忘录模式
一.引子 俗话说:世上难买后悔药.所以凡事讲究个"三思而后行",但总常见有人做"痛心疾首"状:当初我要是--.如果真的有<大话西游>中能时光倒流的& ...
- Java进阶篇设计模式之十二 ---- 备忘录模式和状态模式
前言 在上一篇中我们学习了行为型模式的策略模式(Strategy Pattern)和模板模式(Template Pattern).本篇则来学习下行为型模式的两个模式,备忘录模式(Memento Pat ...
随机推荐
- Eclipse Egit 安装
help->Install new software-> 在 work within 中输入以下网址 安装地址: http://download.eclipse.org/egit/upda ...
- No deleted LINE chat messages recovered on iOS 9.1 after UFED extraction
The evidence is iPhone 5s with iOS 9.1 and not jail breaked. I use UFED to do advanced logical extra ...
- 轻松入门React和Webpack
最近在学习React.js,之前都是直接用最原生的方式去写React代码,发现组织起来特别麻烦,之前听人说用Webpack组织React组件得心应手,就花了点时间学习了一下,收获颇丰 <!-- ...
- Ninject依赖注入——构造函数的注入
1.Ninject简介 Ninject是基于.Net平台的依赖注入框架,它能够将应用程序分离成一个个高内聚.低耦合(loosely-coupled, highly-cohesive)的模块,然后以一种 ...
- Setup Factory 程序打包
1.检测是否已安装 在On Startup中写入如下代码: result1=Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\sohe ...
- C# app.config文件配置和修改
很多时候我们需要对系统的.config文件进度读写操作,例如:系统初始化的参数的更改.系统参数的改变都需要更新到配置文件. 首先我们有必要了解一下app.config.exe.config和vshos ...
- HBase数据导出到HDFS
一.目的 把hbase中某张表的数据导出到hdfs上一份. 实现方式这里介绍两种:一种是自己写mr程序来完成,一种是使用hbase提供的类来完成. 二.自定义mr程序将hbase数据导出到hdfs上 ...
- Spark官方文档——本地编写并运行scala程序
快速开始 本文将介绍如何用scala.java.python编写一个spark单击模式的程序. 首先你只需要在一台机器上成功建造Spark:做法: 进入Spark的根目录,输入命令:$ sbt/sbt ...
- Google -We’re Sorry....
Author:KillerLegend From:http://www.cnblogs.com/killerlegend/p/3734840.html Date:2014.5.18 一大清早 一大早起 ...
- ASP.NET MVC4学习笔记之Controller的激活
一. 高层相关类说明 当路由系统根据请求Url收集路由信息后,下一步就要将路由信息传给Controller激活系统,Controller激活系统负责实现了IController接口的Controlle ...