JAVA基本概念

-本文仅为个人学习总结,方便个人复习,文章大部分内容为参考资料上的知识点。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、 面向对象的基本特征。 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势, 2、 Java的基本数据类型都有什么?String是基本数据类型吗? 基本数据类型包括int、short、byte、double、boolean、char、long、float String不是基本数据类型,是引用数据类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值