Java 专栏整理(慢慢更新)

133 阅读2分钟

Linux下安装jdk

创建下文件夹

mkdir -p /opt/java/package

上传安装包jdk-8u202-linux-x64.tar.gz 解压

tar -zxvf jdk-8u202-linux-x64.tar.gz

修改配置文件

vi /etc/profile

在最后添加

export JAVA_HOME=/opt/java/package/jdk1.8.0_202
export JRE_HOME=/opt/java/package/jdk1.8.0_202/jre
export CLASSPATH=.:/opt/java/package/jdk1.8.0_202/lib:/opt/java/package/jdk1.8.0_202/lib
export PATH=/opt/java/package/jdk1.8.0_202/bin:$PATH

刷新配置文件

source /etc/profile

程序退出

System.exit(0) 正常退出
System.exit(1) 非正常退出,通常使用在catch

那么拦截退出呢?

 	/**
     * 拦截系统退出
    */
   	private static class NoExitSecurityManager extends SecurityManager {

        boolean exitFilter = true;

        @Override
        public void checkPermission(Permission perm) {
        }

        @Override
        public void checkPermission(Permission perm, Object context) {
        }

        @Override
        public void checkExit(int status) {
            super.checkExit(status);
            if (exitFilter) {
                throw new ExitException(status);
            }
        }
   	}

Java 时间处理使用Calendar

比如6个月之前的时间为

Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.MONTH,-6);
long oldtime=calendar.getTimeInMillis();

而不能使用

long oldtime=System.currentTimeMillis()-1000*60*60*24*30*6;

为啥呢?2个月的还是相同的,因为计算的值不是long,而是默认的int,最后转化为long的。 所以如果还是想自己写实现的方法,要这么写

long oldtime=System.currentTimeMillis()-1000L*60L*60L*24L*30L*6L;

Java 的类型和范围如下:

byte  
基本类型 byte short int long folat double char boolean
范围
大小	最小取值	最大取值	包装类型
	8  bit	-128-27次方)	12727次方减1)	Byte
short	16 bit	-215次方(-32 768215次方减132 768)	Short
int	32 bit	-231次方(2 147 483 648231次方减12 147 483 647)	Integer
long	64 bit	-263次方	263次方减1	Long
folat	32 bit	IEEE754	IEEE754	Float
double	64 bit	IEEE754	IEEE754	Double
char	16 bit	Unicode o	Unicode 216次方减1	Charater
boolean	——	——	——	Boolean

我想知道谁(哪个方法)调用了本方法

 /**
     * 获取堆栈信息,找到调用方法的位置,是谁调用了本方法
     */
    private static void getStack(){
        //获取调用的相关信息,返回结果数组,Stack堆栈,Trace跟踪,Element元素
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        //这个对象只有四个属性,对应的方法可以获取,
        //分别是:declaringClass申请类、methodName方法名、fileName文件名、lineNumber所在代码行

        //第一个数据[0]是获取对象线程方法(getStackTrace)的堆栈跟踪对象,一般不用
        //第二个数据[1]是当前方法调用线程的堆栈跟踪对象(Thread.currentThread()),一般也不用
        //第三个数据[2]就是谁调用本方法的对象了,一般用这个
        StackTraceElement targetElement = stackTrace[2];
        //方法名字
        String className = targetElement.getClassName()+".java";
        System.out.println(className);
        //调用方法的所在行数
        int lineNumber = targetElement.getLineNumber();
        System.out.println(lineNumber);
        //调用本方法的方法的方法名
        String methodName = targetElement.getMethodName();
        System.out.println(methodName);
        System.out.println("-------------------------");
    }

Java运行

指定大小

java -jar -Xms1024m -Xmx1536m -XX:PermSize=128M -XX:MaxPermSize=256M car.jar

1、堆内存:最小1024M,最大1536M。(对象使用的内存)

2、永久内存:最小128M,最大256M。(类使用的内存,PermGen)