-本文仅为个人学习总结,方便个人复习,文章大部分内容为参考资料上的知识点。
JAVA语言有哪些优点
1.Java为纯面向对象的语言;
2.平台无关性;
3.Java提供了很多内置的类库,通过这些类库,简化了开发人员的程序设计工作,同时缩短了项目的开发时间;
4.提供了对Web应用开发的支持;
5.具有较好的安全性和健壮性;
6.去除了C++语言中难以理解,容易混淆的特性。
Java与C/C++的异同
1.Java为解释性语言,其运行过程为:程序源代码经过Java编译器编译成字节码,然后由JVM解释执行。
2.Java为纯面想对象语言,所有代码(包括函数、变量等)必须在类中实现,出基本数据类型(包括int、float等)外,所有类型都是类;
3.Java语言提供了垃圾回收期来实现垃圾的自动回收,不需要程序显示的管理内存的分配;
4.Java具有平台无关性,即对每种数据类型都分配固定长度;
5.Java提供对注释文档的内建支持,所以源码文件为可以包含它们自己的文档。通过一个单独的程序,这些文档信息可以提取出来,并重新格式化成HTML;
6.Java包含了一些标准库,用于完成特定的任务,同时这些库简单易用,能够大大缩短开发周期。
为何需要public static void main (String[] args) 这个方法
public static void main (String[] args)为Java程序的入口方法,JVM在运行程序时,会首先查找main()方法。其中public时权限修饰符,表明了任何类或对象都可以访问这个方法,static表明main()方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以通过类名.main()直接访问,JVM在启动是就是按照上诉方法的签名(必须有public修饰static,返回值为void,且方法的参数为字符串数组)来查找方法的入口欧地址,若能找到,就执行;找不到,则会报错。void表明方法没有返回值,main是JVM识别的特殊方法名,是程序的入口方法。字符串数组参数args为开发人员在命令状态下与程序交互提供了一种手段。
引申
1.main()方法是否还有其他可用的定义格式?
- 由于public与static没有先后顺序关系,因此下面的定义也是合理的。
static public void main (String[] args)
- 也可以把main()方法定义为final
final static final void main (String[] args)
- 也可以用synchronized来修饰main()方法
static public synchronized void main (String[] args)
2.同一个Java文件中是否可以有多个main()方法?
虽然每个类中都可以定义main()方法,但是只有与文件名相同的用public修饰的类中的 main()方法才能作为整个程序的入口方法。
如何实现在main()方法执行前输入“Hello World”
在Java语言中,由于静态块在类被加载时就会被调用,因此可以再main()方法执行前,利用静态块实现输出“Hello World”的功能,代码示例如下:
public class Test{
static{
System.out.println("Hello World1");
}
public static void main (String[] args){
System.out.println("Hello World2");
}
}
程序运行结果为:
Hello World1
Hello World2
Java程序初始化的顺序是怎样的
在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化,才会调用对象所在类的构造函数创建对象。
Java程序的初始化一般遵循三个原则:
1.静态变量(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次;
2.父类优先于子类进行初始化;
3.按照成员变量的定义顺序进行初始化。
Java程序初始化工作的执行程序是:
父类静态变量,父类静态代码块,子类静态变量,子类静态变量代码块,父类非静态变量,父类非静态代码块,子类非静态变量,子类非静态代码块,子类构造函数。
下面给出一个代码块例子:
class Base{
static{
System.out.println("Base static block");
}
{
System.out.println("Base block");
}
public Base(){
System.out.println("Base Constructor");
}
}
public class Derived extends Base{
static{
System.out.println("Derived static block");
}
{
System.out.println("Derived block");
}
public Derived(){
System.out.println("Derived constructor");
}
public static void main (String[] args){
new Derived();
}
}
程序的运行结果是:
Base static block
Derived static block
Base block
Base Constructor
Derived block
Derived constructor
Java中的作用域
在Java语言中,变量的类型主要有3中:成员变量、静态变量和局部变量。
作用域和可见性 | 当前类 | 同一package | 子类 | 其他package |
---|---|---|---|---|
public | √ | √ | √ | √ |
private | √ | × | × | × |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
1、public :表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问。
2、private :表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外的其他类或者对象都没有访问权限。
3、protected :表明成员变量或方法对该类自身,与它在同一个包中的其他类,在其他包中的该类的子类都可见。
4、default :表明该成员变量或方法只有自己和与其位于同一包内的类可见。若父类与子类位于同一包内,则子类对父类的default成员变量或方法都有访问权限;若父类与子类位于不同的package内,则没有访问权限。
- 以上修饰符只能修饰成员变量,不能用来修饰局部变量。private与protected不能用来修饰外部类(只有public、abstract或final能用来修饰外部类),但他们可以用来修饰内部类。
构造函数
构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量。在Java语言中,构造函数具有以下特点:
1、构造函数必须与类同名,并且不能有返回值(返回值也不能为void);
2、每个类中可以有多个构造函数;
3、构造函数可以有0、1或者1个以上的参数;
4、构造函数总是伴随着new操作一起调用,且不能由程序的编写者直接调用,必须要由系统调用。构造函数在实例化时会被自动调用,且只调用一次,普通方法是在程序执行到它时被调用,且可以被对象调用很多次。
5、构造函数的主要作用是完成对象的初始工作;
6、构造函数不能被继承,因此,不能被覆盖,但是构造函数能够被重载,可以使用不同的参数个数或参数类型来定义多个构造函数;
7、子类可以通过super关键字来显式地调用父类的构造函数,当父类没有提供无参数的构造函数时,子类的构造函数中必须显式地调用父类的构造函数。如果父类提供了无参数的构造函数,此时子类的构造函数就可以不显式地调用父类的构造函数,在这种情况下编译器会默认调用父类提供的无参数构造函数。当有父类时,在实例化对象时会先执行父类的构造函数,然后执行子类的构造函数。
8、当父类和子类都没有定义构造函数时,编译器会为父类生成一个默认的无参数的构造函数,给子类也生成一个默认的无参数的构造函数。
- 普通方法也可以与构造函数有相同的方法名。
package的作用
package有以下两个作用:
1、提供多层命名空间,解决命名冲突,通过使用package,使得处于不同package中的类可以存在相同的名字。
2、对类按功能进行分类,使项目的组织更加清晰。
package的用法
1、在每个源文件的开头加上“package packagename;”,然后源文件所在目录下创建一个新目录,名称为packagename。
2、用javac指令编译每个sourcename.java源文件,将生成的sourcename.classname文件复制到packagename目录。
3、用java指令运行程序:java packagename.sourcename
以下是一个简单的程序示例:
package com.pkg;
public class TestPackage{
public static void main(String[] args){
System.out.println("Hello World");
}
}
通过运行指令javac - d.TestPackage.java编译代码,会在当前目录下自动生成目录com/pkg,然后通过运行指令java com.pkg.TestPackage执行程序,程序运行结果为:
Hello World