round方法返回与参数最接近的长整数
Case1:小数点后第一位 = 5
正数:Math.round(11.5) = 12
负数:Math.round(-11.5) = -11
Case2:小数点后第一位 < 5
正数:Math.round(11.49) = 11
负数:Math.round(-11.49) = -11
Case3:小数点后第一位 > 5
正数:Math.round(11.51) = 12
负数:Math.round(-11.51) = -12
先new 了一个“xyz”,再new了个s,再把xyz指向s
BEA WebLogic Server;
IBM WebSphere Application Server;
JBoss;
Tomcat ;
接口可以继承接。抽象类可以实现接口,抽象类也可以继承实体类前提是实体类必须有明确的构造函数。
List和Set是的,而Map没有继承自collection接口,而实现Map接口的子类同时也可以实现Collection接口。
服务器启动时候会建立一定数量的池连接,并且一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并且将其标记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接标记位空闲,其他调用就可以使用这个连接。
都不能
Set中的元素是不能重复的,用iterator()方法来区分重复与否。equals判断两个set元素是否相等,==表示是否是在内存同一位置(相同对象)
构造器constructor不能被继承,因此不能重写,但是可以被重载。
括号内的表达式是一个整数表达式。因此传递给switch和case语句的参数应该是int/short/char/byte,long/String都不能作用于Switch
会执行,在return前执行
2<<3,左移三位
值传递,java只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是不会改变的。
不能,一个对象的一个synchronized方法只能由一个线程访问。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只能有一个实例存在。
一般Singleton模式通常有几种形式:
1.定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化的时候实例化,通过一个getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton{
private Singleton(){
//在内部定义了一个自己的实例
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
}
2.
//这个方法比第一个方法有所改进,不用每次都生成对象,只是第一次使用的时候生成实例,提高了效率
public class Singleton{
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
if (instance==null){
instance=new Singleton();
return instance;
}
}
}
3.其他方法:定义一个类,他的构造方法是private的,所有方法是static的。
由于Java不支持多继承,而有可能某个类或者对象要使用分别在几个类或者对象里的方法,现有的单继承机制不能满足要求。
与继承相比,接口具有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里边的所有方法和变量,并且接口里边的变量在默认状态下都是public static,所有方法默认情况下是public。
当程序违反了语义规则时,虚拟机就会将发生的错误表示为一个异常。
违反语义规则包括两种情况:
1.Java类库内置的语义检查。例如数组下标越界,会引发IndexoutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并且自由选择在何时使用throw关键字引发异常。所有的异常都是java.lang.Throwable子类。
Java语言的一个显著的特点是引入了垃圾回收机制,是c++程序员最头痛的内存管理问题迎刃而解。
因为有垃圾回收机制,Java中的对象不再有作用域的改变,只有对象的引用才有作用域。
垃圾回收期通常是一个单独的低级别的线程与西宁,不可预知的情况下对堆内存中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员并不会实时的调用垃圾回收器对某个对象或者所有对象进行垃圾回收。
回收机制有如下几种:
**分代垃圾回收
标记垃圾回收
增量垃圾回收**
wait():使一个线程处于等待状态,并且释放所持有的对象的lock
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要catch InterruptedException方法
notify():唤醒一个处于等待状态的线程,注意的是调用此方法的时候,并不能确切的唤醒哪一个等待状态的线程,而是由JVM确定唤醒哪个线程。
Allnotify():唤醒所有处于等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让他们竞争。
List和Map,List的具体实现包括ArrayList和Vector,他们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适用于查找。
Map提供了一个更为通用的元素存储方法。Map集合类用于存储键值对,其中每个key映射到一个value。Map的用途非常广泛。
Java 中的所有类,必须被装载到JVM中才能运行,这个装载工作是由JVM中的classLoader类装载器完成的,classLoader所做的工作实质上是把类文件从硬盘读取到内存中。
Java中的类大致上分为三种:系统类、扩展类、程序员自定义的类。
类的装载方式有两种:
1、隐式装载:程序在运行过程中当碰到new等方式生成对象时,隐式调用classLoader加载对应的类到JVM中。
2、显式装载:通过class.forname()等方法,显式的加载需要的类
类加载的动态性体现:
一个应用程序总是由多个类组成,java程序启动时,并不是一次性把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到JVM中,其他类等到JVM用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统设计的,而用到时候再加载也是java动态性的表现。
Java类加载器
Java中的类加载器实质上也是累,功能是把类载入jvm汇总,值得注意的是jvm的类加载器并不是一个而是三个
Bootstrap Loader 负责加载系统类;
ExtClassLoader负责夹杂扩展类
APPClassLoader负责加载应用类
类加载器之间是如何协调工作的?
Java采用了委托模型机制,这个机制简单来讲就是类装载器有载入类的需求时会先请示其parent使用其搜索路径帮忙载入,如果parent找不到那么才由自己依照自己的搜索路径搜索类
BootstrapLoader <—(Extends)—-AppClassLoader <—(Extends)—-ExtClassLoader
没问题,中文可以用Unicode编码,而且占2个字节,而一个char占16个字节,所以char放一个汉字是没有问题的。