------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、JVM、JRE和JDK的区别:
JVM(JavaVirtual Machine):java虚拟机,用于保证java的跨平台的特性。
java语言是跨平台,jvm不是跨平台的。
JRE(JavaRuntime Environment):java的运行环境,包括jvm+java的核心类库。
JDK(JavaDevelopment Kit):java的开发工具,包括jre+开发工具
2、环境变量path和classpath的作用是什么?
(1)path是配置Windows可执行文件的搜索路径,即扩展名为.exe的程序文件所在的目录,
用于指定DOS窗口命令的路径。
(2)Classpath是配置class文件所在的目录,用于指定类搜索路径,JVM就是通过它来寻找该类的class类文件的。
3、java语言的三种技术架构
J2EE:企业版
是为开发企业环境下的应用程序提供的一套解决方案。
该技术体系中包含的技术如 Servlet、Jsp等,主要针对于Web应用程序开发。
J2SE:标准版
是为开发普通桌面和商务应用程序提供的解决方案。
该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。
比如Java版的扫雷。
J2ME:小型版
是为开发电子消费产品和嵌入式设备提供的解决方案。
该技术体系主要应用于小型电子消费类产品,如手机中的应用程序等。
4、内存结构:
栈内存:存放基本数据类型和对象的引用,当数据使用完,所占空间会自动释放。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
静态域:存放在对象中用static定义的静态成员。
常量池:存放常量。
非RAM存储:硬盘等永久存储空间。
方法区:静态成员、构造函数、常量池、线程池
本地方法区:window系统占用
寄存器:
^ : 两边相同结果是false。
两边不同结果是true。
交换的另一种方式
n = n + m;//如果n和m的值非常大,容易超出int范围。
m = n - m;
n = n - m;
Integer类的toBinaryString()、toHexString()
Switch()、case:、default无顺序最后执行
Byte 范围-128到127,float=1.2f
int[] a=new int[2];或者int[] a=newint[]{1,2,3};
双for循环
尖朝上,可以改变条件。让条件随着外循环变化。
尖朝下,可以初始化值,让初始化随着外循环变化。
单词:true,static,length, reverse(反转),toBinaryString(Integer类二进制转换 ),toHexString(十六), @author(作者),synchronized(同步),abstrct(抽象),Exception(异常),wait(等待),notify(唤醒),
注意:重载和返回值类型没关系。
NullPointerException:空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。
获取最值得两种方式:1.设第一个元素为最大值;2.角标法
冒泡排序:双for,第一层for为了遍历,第二场for为了比较,前后比较。
选择排序:
int max = 0;
int tmp = 0;
for(int i=0;i<arr.length;i++){
max=i;//查找第i大元素,记下第i大位置
for(int j=i+1;j<arr.length;j++){
if(arr[max]<arr[j])
max=j;//记下较大数位置,再次比较,直到最大
}
//如果第i大数的位置不在i,则交换。
if(i!=max){
tmp=arr[i];
arr[i]=arr[max];
arr[max]=tmp;
}
}
成员变量:在堆内存中,因为对象的存在,才在内存中存在。
局部变量:存在栈内存中。
Car c = new Car();//c就是一个类类型变量。记住:类类型变量指向对象。
注意:私有仅仅是封装的一种表现形式。
构造函数是在对象一建立就运行。给对象初始化。
而一般方法是对象调用才执行,给是对象添加对象具备的功能。
构造代码块。优先于构造函数执行。
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。构造函数有多个!构造代码块中定义的是不同对象共性的初始化内容。
默认构造构造函数的权限是随着的类的变化而变化的。
单例设计模式:解决一个类在内存只存在一个对象。
1,将构造函数私有化。
2,在类中创建一个本类对象。
3,提供一个方法可以获取到该对象。
class Single
{
private Single(){}
private static Single s = new Single();
public static SinglegetInstance()
{
return s;
}
}
有两种方式:建议使用饿汉式。
1. 饿汉式:先初始化对象(例子同上)
2.懒汉式。对象是方法被调用时,才初始化,也叫做对象的延时加载。
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}