1.判断题:
Java程序一般应当含有main方法,因为它是所有JaVa程序执行的入口(错)
解析:applet(java小程序)不用,application(java应用程序)需要。(见)
2.判断题:
当运行Java程序时,类加载器将字节码加载到内存中,字节码检验器确认所有的字节码是合法的并且不会破坏Java的安全限制,然后解释器读取这些字节码并将它们翻译成计算机可以理解的语言。在程序执行的时候还有可能需要在内存中存储一些必要的数据。(对)
3.易错现象:
4.关于java中的堆区、栈区、方法区
参考:
关于JVM,参考书《深入浅出JVM》,后面补张图,虽然对JVM还是不太了解,暂且先放放。
先了解具体的概念:
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
(1)堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
(2)栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
(3)方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
5.static代码块在Java虚拟机加载类时执行;每个static代码块只会被执行一次.
6.关于java的main方法:
(1)public,static,void,String args[],四个因素缺一不可;main函数名不可换;args可以随意换。
(2)static是必须的,这样可以在不需要构造类实例的前提下,直接运行应用程序。(见题3)
public不是必须的,声明为public是为了main方法可以从任意一个Java运行环境中调用。
可以使用public、默认(即什么都不写)、protected、private进行修饰,编译不会出错,但会提示“在类***中找不到主方法, 请将主方法定义为:public static void main(String[] args)”。
例题1:
以下哪些是main方法的正确形式?
(1)static void main(String[] args){}
(2)public static void main(String[] args){}
(3)public static void main(String args[]){}
(4)public static void main(String door[]){]
答案:1,2,3,4
例题2:
public class TestMain{
//情况1: public static void main(String[] args){//可以通过编译,而且能运行 System.out.println("test ok!"); } //情况2: static public void main(String[] args){//可以通过编译,而且能运行 System.out.println("test ok!"); } //情况3: static void main(String[] args){//可以通过编译,但不能运行,提示:Main method not public System.out.println("test ok!"); } //情况4: public static void main(String args){//可以通过编译,但不能运行 System.out.println("test ok!"); } //情况1: public void main(String[] args){//可以过编译,不可运行,因为static修饰符是必须的。 System.out.println("test ok!"); } //情况5: void main(String[] args){//可以通过编译,不可运行 System.out.println("test ok!"); } //情况6: public static void main(String[] args){ System.out.println(args.length); //System.out.println(args[2]);//命令行上输入java TestMain,则args[2]不存在,故有异常,不能正常运行 }}
7.jdbc中,第一步需要Class.forname("某个数据库的类"),把它叫做“加载数据库驱动”?
要用jdbc,首先要注册驱动的。比如注册一个mysql的驱动:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());那么Class.forName("com.mysql.jdbc.Driver");这句话是加载com.mysql.jdbc.Driver.java的,看一下这个类的源码就知道了,在这个类的静态代码块是这样写的:1 static2 {3 try4 {5 DriverManager.registerDriver(new Driver());6 } catch (SQLException e) {7 throw new RuntimeException("Can't register driver!");8 }9 }
不光是mysql,sql server ,oracle的驱动都是类似的。