java代码怎么组成的 java代码介绍

Java类的基本组成和使用Java类的基本组成:java由一系列的接口和类组成,所有类的父类是:object 。对象的生成:使用new关键字产生对象,该对象类中构造方法就是用来产生对象的 。对象由一系列的属性和行为构成 。使用和删除:对象构成之后 , 就可以使用对象点方法、属性进行操作,问删除 , 如果对象失去了引用的指向,会自动被GC(垃圾回收机制)回收 。接口与包:接口(行为的抽象),实现接口,必须实现接口的方法,哪怕是空实现 , 目前我见过唯一一个没有实现的类就是:HttpSrvlet,其中的service实现的是抽象方法,接口目的有3点:1、因为在java不像C,java是单继承 , 所以为了实现多继承,提出了接口的概念 。2、为了规范,比如财付通、支付宝等第3方支付工具 , 外面的人怎么用它呢?他们仅仅是提供了接口给外面的,不管你怎么操作,你必须按照我提供给你的接口去实现 。3、多态(Oriented Object的思想),程序的健壮性(开闭原则) , 方便维护和扩展,动态绑定可以实现接口变量指向实现类 。包的概念就是为了方便管理 。oracle中的包的概念也是如此常用的类和接口就不说了,自己去查查API,太多了
介绍下Java程序的结构Java语言是面向对象的程序设计语言 , Java程序的基本组成单元是类,类体中又可包括属性与方法两部分 。而每一个应用程序都必须包含一个main()方法,含有main()方法的类称之为主类 。
一: Java程序的主类及其格式
作为一个可以独立运行的Java程序,在它的众多类中必须要有一个类作为程序的起始类 , 为了方便 , 本书把这个类称为主类 。当需要执行一个程序时 , 人们在java命令后面输入的便是这个主类的文件名(也是主类名),因此主类文件是Java运行环境建立起来之后第一个被装入虚拟机的用户文件 。为了使虚拟机可以找到程序运行的起始入口,主类必须为public类,并含有一个在格式上符合约定的入口方法main(),其格式如下:
public static void main(String[] args){

}
其中各参数含义如下 。
main:入口方法名称 。
args:命令行参数,这是一个String对象数组 。
static:修饰字,说明main()是一个静态方法(类方法) 。
public:修饰字,说明main()具有公有访问属性 。
于是,主类框架的源代码如下:
public class 主类名{

public static void main(String[] args){

}
}
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()方法的类称为主类,是为了表达方便 。
二: JAVA源程序在命令行下的运行
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);
}
}
三:完整的java源程序应该包括下列部分
【java代码怎么组成的 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 的代码详解class Person{//Persion类
String name;//String类变量java代码怎么组成的,未初始化,默认null
int age;//int类变量,默认0
public Person()//Person类的无参构造方法,一般用来初始化变量,如之前的name 。比如有时候需要定义人这个类特有的属性,会说话,那么一般会在无参构造函数里面写上canTalk=true;
{
}
public Person(String name,int age)//Person类的有参构造方法,参数name和age,和类变量name、age无关
{
this.name=name;//this指Persion类,就是把于传过来变量name赋值给之前的类变量name
this.age=age;//同上
}
public String talk(){//具有String返回值的方法,调用它的时候会得到String返回值
return "我是" this.name " , 今年" this.age "岁";//调用talk的时候用String a=talk();的形式,a的值就是"我是" this.name ",今年" this.age "岁"
}
}
public class TestObjectArray{//TestObjectArray公共类,java文件的文件名需和公共类值相同,这段代码必须出现在TestObjectArray.java文件中
public static void main(String[] args){//主方法,程序的入口
Person[] p={new Person("张三",25),new Person("李四",30),new Person("王五",35)};//实例化Persion类,用人这个类来举例,每个人都有相同的一些特性,但每个人不同特性的属性值不同 , 如年龄的大小不同,实例化就相当于产生不同的人 。这里是用数组的形式实例化
for(int i=0;ip.length;i){//根据p的长度循环
System.out.println(p[i].talk());//p[1]时,会调用Persion类里面的talk()函数 , 并且传入的参数是 "张三",25,那么会显示java代码怎么组成的:"我是张三 , 今年25岁"。System.out.println()换行显示括号内的内容
}
}
}
java工作原理Java工作原理
由四方面组成java代码怎么组成的:
(1)Java编程语言
(2)Java类文件格式
(3)Java虚拟机
(4)Java应用程序接口
当编辑并运行一个Java程序时java代码怎么组成的,需要同时涉及到这四种方面 。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类java代码怎么组成的,通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用。
什么是Java字节码?它是程序的一种低级表示,可以运行于Java虚拟机上 。将程序抽象成字节码可以保证Java程序在各种设备上的运行
Java号称是一门“一次编译到处运行”的语言,从我们写的java文件到通过编译器编译成java字节码文件(.class文件),这个过程是java编译过程;而我们的java虚拟机执行的就是字节码文件 。不论该字节码文件来自何方,由哪种编译器编译,甚至是手写字节码文件,只要符合java虚拟机的规范,那么它就能够执行该字节码文件 。
JAVA程序的运行
因为Java具有跨平台特性 , 为了实现这个特性Java执行在一台虚拟机上,这台虚拟机也就是JVM,Java通过JVM屏蔽了不同平台之间的差异,从而做到一次编译到处执行 。JVM位于Java编译器和OS平台之间,Java编译器只需面向JVM,生成JVM能理解的代码,这个代码即字节码,JVM再将字节码翻译成真实机器所能理解的二进制机器码 。
字节码是怎么产生的?
我们所编写的程序都是.java格式 , 通常在执行的时候也许点击一下eclipse的运行键就可以在控制台看到运行结果,但是也可以更酷一些 , 如果你装了JDK,那就可以直接在以命令行的方式编译运行你的.java文件,编译后会形成.class文件,这个.class文件即字节码 。
字节码怎么解读?
上图是编译好的字节码文件,即一堆16进制的字节,如果使用IDE去打开,也许看到的是已经被反编译的我们所熟悉的java代码 , 但这才是纯正的字节码
这里只介绍字节码由哪些部分组成, 具体的意思自行百度或者看文尾的连接, 有较为详细的讲解
上图即字节码文件的组成部分, Class文件的结构不像XML等描述语言那样松散自由 。由于它没有任何分隔符号,
所以,以上数据项无论是顺序还是数量都是被严格限定的 。哪个字节代表什么含义,长度是多少,先后顺序如何,都不允许改变,如上图左侧即每一部分规定的长度
魔数(Magic Number)
魔数是用来区分文件类型的一种标志,一般都是用文件的前几个字节来表示 。
比如0XCAFE BABE表示的是class文件 , 那么有人会问,文件类型可以通过文件名后缀来判断?。渴堑?,但是文件名是可以修改的(包括后缀),那么为了保证文件的安全性,将文件类型写在文件内部来保证不被篡改 。
至于为什么是CAFE BABE估计大家也能猜到, 程序员与咖啡的不解之缘
版本号(Version)
版本号含主版本号和次版本号,都是各占2个字节 。在此Demo种为0X0000 0033 。其中前面的0000是次版本号,后面的0033是主版本号 。通过进制转换得到的是次版本号为0,主版本号为51 。高版本的JDK能向下兼容以前版本的Class文件,但不能运行以后版本的Class文件 , 即使文件格式未发生任何变化.这就是target参数的用处,可以在使用JDK 1.7编译时指定-target 1.5
常量池(Constant Pool)
常量池是Class文件中的资源仓库, 量池中主要存储2大类常量:字面量和符号引用 。字面量如文本字符串,java中声明为final的常量值等等,而符号引用如类和接口的全局限定名,字段的名称和描述符,方法的名称和描述符 。常量池是一个表结构,在表的内容前有一个类型的计数器,表示常量池的长度
上面的表中描述了11中数据类型的结构,其实在jdk1.7之后又增加了3种(CONSTANT_MethodHandle_info,CONSTANT_MethodType_info以及CONSTANT_InvokeDynamic_info) 。这样算起来一共是14种
访问标志(Access_Flag)
访问标志信息包括该Class文件是类还是接口 , 是否被定义成public,是否是abstract,如果是类,是否被声明成final 。通过上面的源代码,我们知道该文件是类并且是public 。
0x 00 21:是0×0020和0×0001的并集 。其中0×0020这个标志值涉及到字节码指令
类索引(This Class Name)
类索引用于确定类的全限定名
0×00 03 表示引用第3个常量,同时第3个常量引用第19个常量,查找得”com/demo/Demo” 。#3.#19
父类索引(Super Class Name)
0×00 04 同理:#4.#20(java/lang/Object)
接口索引(Interfaces)
通过上边字节码图可以看到 , 这个接口有2 n个字节,前两个字节表示的是接口数量,后面跟着就是接口的表 。我们这个类没有任何接口,所以应该是0000 。果不其然 , 查找字节码文件得到的就是0000 。
字段表集合(fields)
字段表用于描述类和接口中声明的变量 。这里的字段包含了类级别变量以及实例变量,但是不包括方法内部声明的局部变量 。接下来就是2 n个字段属性 。我们只有一个属性a,所以应该是0001 。查找文件果不其然是0001 。
该区域含有字段的访问标志, 访问权限, 字段的名称索引, 字段的描述符索引, 属性表
描述符的作用就是用来描述字段的数据类型、方法的参数列表和返回值 。而属性表就是为字段表和方法表提供额外信息的表结构 。对于字段来说,此处如果将字段声明为一个static final msg = "aaa"的常量 , 则字段后就会跟着一个属性表,其中存在一项名为ConstantValue , 指向常量池中的一个常量,值为的"aaa" 。
方法(methods)
包含访问标志表, 方法名索引 , 方法描述符索引, 属性表数量,等
Attribute
0×0001 :同样的,表示有1个Attributes了 。
0x000f : #15(“SourceFile”)
0×0000 0002 attribute_length=2
0×0010 : sourcefile_index = #16(“Demo.java”)
SourceFile属性用来记录生成该Class文件的源码文件名称 。
怎么写java代码?只要自己的电脑安装了jdk环境,任何地方都可以进行java代码的编写的,记事本也可以 。
关于java代码怎么组成的和java代码介绍的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读