java基础学习笔记
Q: What if the main method is declared as private? 如果将主函数声明为私有类型的会怎样?
A: The program compiles properly but at run time it will give "Main method not public." message. 程序编译的时候会通过但是在运行时会报错“主函数不是公共类型的”
展开讨论:
Java语言是面向对象的程序设计语言,Java程序的基本组成单元是类,类体中又可包括属性与方法两部分。而每一个应用程序都必须包含一个main()方法,含有main()方法的类称之为主类。
在java中,main()方法是java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public
static void类型的,方法必须是接受一个字符串数组的参数等。 因为main()方法是由Java虚拟机调用的,所以必须是public,虚拟机调用的main()方法的时候,不需要产生任何对象,所以main()方法声明为static,且不需要返回值,所以必须声明为void,最终格式如下所示:public
static void main(String[] args)
一. Java程序的主类及其格式
作为一个可以独立运行的Java程序,在它的众多类中必须要有一个类作为程序的起始类,为了方便,本书把这个类称为主类。当需要执行一个程序时,人们在java命令后面输入的便是这个主类的文件名(也是主类名),因此主类文件是Java运行环境建立起来之后第一个被装入虚拟机的用户文件。为了使虚拟机可以找到程序运行的起始入口,主类必须为public类,并含有一个在格式上符合约定的入口方法main(),其格式如下:
public static void main(String[] args){ |
其中各参数含义如下。
main:入口方法名称。
args:命令行参数,这是一个String对象数组。
static:修饰字,说明main()是一个静态方法(类方法)。
public:修饰字,说明main()具有公有访问属性。
于是,主类框架的源代码如下:
public class 主类名{ |
Java程序的主类常常使熟悉C/C++的读者感到迷惑:main()方法不就相当于C/C++程序中的主函数吗,为什么非得把它放到一个类里,难道它有什么不同吗?
没错,Java类中main()方法就相当于C/C++程序中的主函数,是一个入口函数。之所以把它封装到一个类里,而不像C/C++那样单独作为一个函数来处理,就本书作者的理解,大概Java的设计者们有如下几个方面的考虑。
1)Java既然把所有事物都看成了对象,那么就没有理由不把程序也看成对象,因为程序也是一种事物。既然是对象,那么它就应该属于某个类并以程序名来命名。既然程序是一种类,那么main()就应该是这个类的一个方法,只不过它有些特殊,它是一个入口方法,并且对它有些特殊规定,例如其名称必须为main(),必须是公有静态方法,有命令行参数等。
2)如果把程序封装成了类,那么包括本程序在内的任何程序就都可以根据需要,随时创建这个类的对象,并通过该对象使用这个类中的资源,这样就便于资源共享,从而提高程序的灵活性。
3)Java程序是一种以类为基本单位的模块化程序,程序被编译后,每一个类会对应生成一个二进制字节码类文件。如果把程序也封装成类,那么它的文件就与其他类文件统一起来,而不会产生其他类型的文件,因而便于管理。
4)之所以把入口方法封装到类中,其根本目的就是要尽可能平等地看待所有的类。因为Java的最终目的是要以类为基本模块来实现可装配软件,如果把main()方法封装到了一个类中,那么就意味着main()与类的其他方法没什么本质区别,只不过是分工不同而已。下面很快就会看到,Java的所有类都可以含有一个入口方法而成为主类。也就是说,在Java程序中根本就没有主类、次类之分,这里之所以把带有main()方法的类称为主类,是为了表达方便。
- class Bank{
- public void init(){
- System.out.println("Yes,I can");
- }
- public static void main(String args[]){
- BankAccount ba1 = new BankAccount(100.00);
- System.out.print("Before transactions, ");
- ba1.display();
- ba1.deposit(74.35);
- ba1.withdraw(20.00);
- System.out.print("After transactions, ");
- ba1.display();
- Bank b = new Bank();
- b.init();
- }
- }
- class BankAccount{
- private double balance;
- public BankAccount(double openingBalance){
- balance = openingBalance;
- }
- public void deposit(double amount){
- balance += amount;
- }
- public void withdraw(double amount){
- balance -= amount;
- }
- public void display(){
- System.out.println("balance = " + balance);
- }
- }
生成的2个class文件
二. 完整的java源程序应该包括下列部分:
package语句;
import语句;
public classDefinition; // 公共的类定义部分,至多只有一个公共类的定义
// java语言规定该java源程序的文件名必须与该公共类名完全一致
classDefinition; // 类定义部分,可以有0个或多个
interfaceDefinition; // 接口定义部分,可以有0个或多个
package:java编译器为每个类生成一个字节码文件,且文件名与类名相同,这就会带来一个问题:同名的类会发生冲突。package便可管理类命名空间。
一般地,具有相同功能的类放在一个package中。
一个java源程序至多只能有一个公共类的定义。
若java源程序有一个公共类的定义,则该源文件名字必须与该公共类的名字完全相同。
若源程序中不包含公共类的定义,则该文件名可以任意取名。
若一个源程序中有多个类定义,则在编译时将为每个类生成一个.class文件。
三.java编程规范
包名:全小写的名词,中间可由点分割,eg:java.awt.event
类名:首字母大写,多个单词合成,每个单词首字母也要大写,eg: class HelloWorldApp
接口名: 同类名,eg: interface Collection
方法名: 由多个单词合成,第一个单词通常为动词,首字母小写,中间的每个单词的首字母都要大写,eg: balanceAccount, isButtonPressed
变量名: 全小写,一般为名词,eg: length
常量名: 基本数据类型的常量名为全大写,如果由多个单词构成,可以用下划线隔开,eg: int YEAR, int WEEK_OF_MONTH
对象类型的常量,则是小写混合,由大写字母把单词隔开
注意几点:
一个.java文件中可以有很多类。不过注意以下几点:
1.public 权限的类只能有一个(也可以一个都没有,但最多只有1个)
2.主类跟java文件名一样,其他class全部属于内部类。内部类声明一般不带public。
3.这个.java文件的文件名必须是public类的类名(一般的情况下,这里放置main方法是程序的入口。)
4.若这个文件中没有public的类,则文件名随便是一个类的名字即可
5.你用Javac 编译这个.java文件的时候,它会给每一个类生成一个.class文件
java基础学习笔记的更多相关文章
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- Java基础学习笔记(一)
Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- java基础学习笔记五(抽象类)
java基础学习总结——抽象类 抽象类介绍
- Java基础学习笔记二十八 管家婆综合项目
本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添 ...
- Java基础学习笔记七 Java基础语法之继承和抽象类
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...
- Java基础学习笔记(五) - 常用的API
API介绍 概念:API 即应用编程程序接口.Java API是JDK中提供给我们使用的类说明文档,这些类将底层的代码实现封装.无需关心这些类是如何实现,只需要学习如何使用. 使用:通过API找到需要 ...
- Java基础学习笔记一 Java介绍
java语言概述 Java是sun公司开发的一门编程语言,目前被Oracle公司收购,编程语言就是用来编写软件的. Java的应用 开发QQ.迅雷程序(桌面应用软件) 淘宝.京东(互联网应用软件) 安 ...
随机推荐
- C#调用进程
Process process = new Process(); process.StartInfo.FileName = "123.exe"; process.StartInfo ...
- PCL编译历程
boost 编译安装包下载地址: http://boost.teeks99.com/ boost安装:http://blog.sina.com.cn/s/blog_7c48b0f10102v0zj.h ...
- CSS常见BUG
CSS Hack IE条件注释: 所有IE:<!--[if IE]> css code <![endif]--> IE6以上:<!--[if gt IE 6]> c ...
- CSS3属性之一:border-radius
语法: border-radius : none | <length>{1,4} [ / <length>{1,4} ]? 相关属性: border-top-right-rad ...
- django-filter 使用Filter来筛选你的数据
django-filter Django-filter is a generic, reusable application to alleviate writing some of the more ...
- ZOJ 3818 Pretty Poem
暴力模拟 细节处理很重要... #include <iostream> #include <cstring> #include <cstdio> using nam ...
- PHP(w3s) 笔记
<!--php注释-->// 这是单行注释# 这也是单行注释/*这是多行注释块它横跨了多行*/
- android获取sdk更新
http://www.th7.cn/Program/Android/201310/154981.shtml 网上许多解决 Android SDK Manager 无法更新(下载)的问题的方法基本都是将 ...
- MLC固态硬盘,与入量是3000次P/E
固态硬盘是什么,固态硬盘寿命有多长 SSD泛指使用闪存芯片组成的SSD固态硬盘,是使用FLASH闪存颗粒作为存储单元,不再使用传统的机械存储方法,使用模拟的方式虚拟出传统 硬盘存取方式和扇区等,也可以 ...
- 转:helloworld:一个完整的WCF案例
原文地址:http://blog.csdn.net/mane_yao/article/details/5852845 WCF的ABC: A代表Address-where(对象在哪里)B代表Bindin ...