黑马程序员技术交流社区

标题: java.技术帖 [打印本页]

作者: 17858802481    时间: 2018-8-2 23:20
标题: java.技术帖
java基本数据类型存放在哪?
基本类型的变量存在栈里或者堆里不是由"大小可知,生存期可知"就能确定了。关键是上下文。
比如
void func(){
int a = 3;
}
这自然是存在栈里的。局部方法嘛。

class Test{
int a = 3;
}
这就肯定是随对象放到堆里的。因此,不要孤立的看到基本类型就说放到栈里,看到引用类型就说放到堆里。从更深层次去理解它们会更好,例如为什么是在基本类型的实例变量在堆上创建,局部变量在栈上创建,这样做有什么好处

思考:
如果你熟悉java的内存结构的话就会知道,堆 是所有线程共享的内存区域,栈 是每个线程独享的,如果你将一个实例变量放在栈内,那么就不存在多个线程访问同一个对象资源了,这显然是不对的,所以实例变量要在堆上创建,也不是线程安全的。但是对于局部变量,是在栈上创建的,每一次方法调用创建一个帧,独享一份内存区域,其他的线程是不会访问到该线程的资源,在 栈上创建也会减轻GC的压力,随着该方法的结束,帧出栈,相对应的内存消除,这种局部变量占用的内存自然就消失了,因此局部变量是线程安全的。

二分法查找
package search;
import java.util.Arrays;
public class BinarySeach {
public static void main(String[] args) {
int[] a = {1,22,33,45,69,70,95,100};
Arrays.sort(a);
int index = binarySearch(a, 95);
System.out.println(index) ;
}
public static int binarySearch(int[] a , int key){
int low = 0;
int high = a.length - 1;
while(low <= high){
System.out.println(low + "------" + high); //循环的次数
int mid = (low + high) / 2; //中间索引
int midVal = a[mid]; //中间元素 猜测的值
if(midVal > key){ //猜大了
high = mid -1;
}else if(midVal < key){ //猜小了
low = mid +1;
}else{
return mid; //猜到了
}
}
return -1;
}
}

myeclipse导出可运行jar包
1、找到你要导出的项目(如果你要导出的文件只是在项目下的其中一个包里也不要选择导出这一个包而是导出整个项目)右键Export
2、选择Runnable Jar file (这是选择可运行的包) 然后下一步
3.Launch configuation 选择的是你的主清单属性(就是你要运行的main方法所在的类,如果找不到就把main方法跑一边)Export destinaction 把导出的文件存放到哪里(不是像下载东西直接选个地址就完了,还要指定文件名和后缀 例如 c:\test.jar)

Library handling 的三个选项(建议选第二个)
4、finish(去你指定的地方就可以找到文件了不用担心你依赖的jar会一起导出了)
5、运行打开cmd java -jar c:\test.jar






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2