JAVA初步学习——第一章 理解并认识Java

理解Java

一、根据以下代码思考这样编写代码的意义

public class Hello{ 
	public static void main(String[] args){ 
		System.out.println("hello world"); 
		} 
	}

1.为什么写java代码的时候要写一个类?

类是组织代码的基本单元

在大多数情况下,需要把执行的代码写在方法中,方法写到类中,所以在写代码的时候,一般都是先定义一个类,类中定义一个方法,然后把要执行的代码写到方法中。

2.为什么类中的方法名字要叫做main?

main方法是java中一个特殊的方法,它是作为java程序的唯一入口而存在的。

无论写了多少个类,多少个方法,JVM一定是从这个固定的程序入口方法开始执行代码的,为了能够让JVM很好的识别这个入口方法,这个方法的编写形式就是固定的。

在类中定义一个main方法的目的就是,让JVM运行Hello这个类的时候,可以直接从类中的程序入口方法,也就是main开始运行代码,又由于main方法是固定的写法,所以JVM很容易就识别出来。

如果Hello中没有固定格式的main方法,使用 java Hello 运行的时候,会报错。原因是因为JVM在Hello类中找不到指定的程序入口,也就是main方法。这个情况下, 还要使用Hello这个的话,就需要在定义其他的一个类,例如Test类,在Test类定义程
序入口main,并且在main方法中调用Hello类中的属性或其他方法,这时候就使用到了Hello类中的代码了。

3.System.out.println(“hello world”),这句代码具体是什么意思?

  • System是JavaSE-API中所提供的一个类
  • out是System类中的一个属性
  • println是out中的一个方法

System.out是访问System类中的一个属性,System.out.println是调用out中的一个方法,而println(“hello world”)方法的作用,是将字符串"hello world"输出到命令行或控制台中。

4.我们为什么可以使用System这个类?

  1. System这个类所在的.java文件已经编写完成,并且已经编译成.class文件
    编译好的System.class文件在rt.jar中
  2. 这个.class文件所在位置,是JVM可以自动加载的指定路径,这样就可以保证JVM可以把这个.class文件中的字节码(也就是System这个类的代码),加载到JVM的内存中
    JVM在启动的时候,会自动读取rt.jar(运行时环境)中所需要的class文件
  3. 使用import(导入)关键字,将要使用的System类,引入到所创建的类中,如果System类是在java.lang包中进行定义的,或者System类和所创建的类是在同一个包下面定义的,那么import语句可以省去不写

5.运行这个类的时候,JVM是通过什么找到Hello.class文件的?

通过CLASSPATH环境变量配置的路径,来查找的Hello.class文件的,如果配置的路径不对,那么运行Hello的时候就会报错,告诉我们找不到这个类。(之前配置JDK的三个环境变量的时候,把CLASSPATH配置的路径就是点(.),表示当前路径。)

6.如何确定在JVM运行所创造的类之前,确实从rt.jar中加载到了System这个类?

java -verbose Hello             //verbose参数可以将JVM启动运行的时候加载的信息输出出来
java -verbose Hello > a.txt    //由于内容太多,在这里做一个输出重定向

通过文件中记录的输出内容,就可以看到JVM在运行Hello这个类之前,整个加载的过程和顺序。

7.Hello这个类的名字和Hello.java的名字有什么必然关系么?

Hello这个类不一定在Hello.java中,但是成功后,Hello这个类一定在Hello.class中

  • 如果文件中的类是public关键字修饰的,那么这个类的名字和java文件的名字就一定要一样
  • 如果文件中的类不是public关键字修饰的,那么这个类的名字和java文件的名字不一样也可以
  • 类名和java文件名字的首字母大写,这是编程规范,大家都是默认遵循这个要求,其实这个字母小写也没有任何问题

二、Package

使用package(包)来进行区分俩个名字一样的类

1.包的命名规则

  1. package其实就是类的命名空间,用来唯一标识这个类的,避免和的类的名字重复
  2. 一般情况,一个公司、组织、社团中所定义的包的名字,就是他们官网的域名(倒过来),因为
    域名一定是全球唯一的,不可能有俩个一样的域名。
    例如,http://commons.apache.org/ 这官网下的代码中的包,都是 package org.apache.commons; 开头的。
  3. package com.tyut.demo;
    这里是三个包,包和包之间用点(.)隔开,编译完之后,需要有对应的三个文件夹分别是
    com/briup/demo ,最后在demo目录中,才有编译生产的class文件

2.一个指定package的类,编译后该如何运行?

这个类通过javac Hello.java编译后,通过java Hello直接运行会报错,但是classpath的值也没有问题。

原因:Hello这个类是定义在指定的包中的,那么就需要在把生成的class文件存放到和包名相对于的文件夹中。

再使用java Hello运行这个Hello类,依然还会报错

因为 一个类一旦指定的包,那么在运行它的时候,就一定要带上它的包名

javac -d . Hello.java可以直接帮我们在指定位置自动创建和包名对应的目录结构,并且把编译好的class文件自动存放到里面,这样就不需要我们在每次编译好一个指定包的类之后,再手动的去创建和包对应的目录
-d表示编译时自动生成和包名对应的目录结构,-d后面的点(.)表示就在当前目录中生成,编译成功后,还会自动把编译好的class文件存到这个生成的目录中

常用的包
java.lang:最常用的一个包,里面的类可以在我们的程序中直接使用,不需要import导入
java.awt、javax.swing、java.awt.event:这三个包属于同一类型的,它们包下面的类都是用来做图形化界面的(GUI)
注意:javax开头的包,是sun公司后面又扩展进来的包,刚开始是没有的
java.io:这个包下的类主要用于输入输出流的操作。也就是读数据/写数据
java.net:这个包下的类主要用于网络编程。例如把计算机A和计算机B之间建立网络连接,然后进行信息传输。
java.util:这个包下的类都是一些常用工具类,可以帮我们在代码中完成一些辅助的功能,例如表示日期、使用集合存储数据、使用工具类操作数组等

认识java

一、历史

  • 1991年4月,由James Gosling博士领导的绿色计划(Green Project)开始启动,这个计划的产品就是Java语言的前身:Oak(橡树)。
  • 1995年5月23日,Oak语言改名为Java,并且在SunWorld大会上正式发布Java 1.0版本。
  • 1996年1月23日,JDK 1.0发布,Java语言有了 第一个正式版本 的运行环境。
  • 1998年12月4日,JDK迎来了一个里程碑式的版本JDK 1.2,Sun在这个版本中把Java技术体系拆分为3个方向 ,分别是面向桌面应用开发的J2SE、面向企业级开发的J2EE和面向手机等移动终端开发的J2ME。
  • 1999年4月27日, HotSpot 虚拟机发布。
  • 2004年9月30日, JDK 1.5 发布,工程代号Tiger(老虎)。
  • 2006年12月11日,JDK 1.6发布。在这个版本中,Sun终结了从JDK 1.2开始已经有8年历史的J2EE、J2SE、J2ME的命名方式,启用 Java SE 6、Java EE 6、Java ME 6 的命名方式。
  • 2006年11月13日,在JavaOne大会上,Sun公司宣布最终会将 Java开源。
  • 2009年4月20日,Oracle公司宣布正式以 74亿美元 的价格收购Sun公司,Java商标从此正式归Oracle所有
  • 2014年3月18日,Oracle公司发布 Java SE 1.8

目前开发中使用的JDK,仍是以JDK8为主要的选择版本。

二、JDK

需要配置三个环境变量,JAVA_HOME、PATH、CLASSPATH,其中PATH是必须,否找不到java的相 关命令所在的文件路径

相关名词

  • SDK (software development kit),软件开发包,主要包含函数库或者工具等
  • JDK (java development kit),java程序开发工具包,面向java程序的开发者——JDK中会自带一个JRE的,也可以专门独立的只安装JRE,但开发人员一定是安装JDK
  • JRE (java runtime enviroment),java程序运行环境,面向java程序的使用者
  • API (application program interface),应用程序编程接口
  • API Documentation,API说明文档,描述API中的类、方法等使用的方式

JDK目录

目录/文件作用
bin目录存放JDK中提供的java相关的命令,例如java、javac、javap等
db目录JDK自带的一个小型数据库,纯java实现
include目录JVM启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件的。
jre目录JDK自带的一个java运行环境
lib目录“library”的缩写,目录中提供了一些Java类库和库文件,也就是jar包。
src.zip文件压缩文件,目录存放JDK核心类的源代码,也就是JavaSE-API的源代码

将来在我们编写的代码中,要使用/调用JavaSE-API中所提供的代码,它的源代码存放在src.zip中,编译后的字节码存放在rt.jar中,这些类、接口的介绍和使用说明,都在JavaSE-API说明文档中,它就像是一本说明书,来指导我们该如何调用这些别人提供给我们的基本代码。

三、java特点

java是什么?

  • 它是一门编程语言——包含基本的语法、特性、思想等
  • 它是开发环境——开发java程序时,需要一些的java开发工具
  • 它是应用环境——开发好的java程序要运行,需要它提供一些的运行环境
  • 它是部署环境——将来在其他平台下开发出的java程序,都需要它提供一个最基础的部署环境

java语言的优点

  • 更纯粹的面向对象编程,加速开发的过程。
  • 一次编写/编译,到处运行,代码可以跨平台
  • 多线程的支持
  • 代码中没有指针管理、内存管理,使得编程人员可以更加专注于系统的业务功能的开发
  • 字节码的验证机制,保证代码的安全性
  • 开源及强大的生态环境,社区活跃,第三方类库选择丰富

四、JVM

JVM是java中最核心的一个东西,它在计算机的内存中,虚拟并提供了java代码可以在其中运行的基础环境。

java代码编译后,计算机并不能直接运行,必须需要经过JVM进行解释后,再进行运行。所以,java其实并不算是真正的编译语言。
JVM本质上是一个规范,每个公司都可以按照这个规范实现自己的JVM虚拟机

五、垃圾回收器

在java语言中,编程人员不需要在代码中控制内存的开辟和释放。

  1. java代码中,开辟要使用的内存空间,使用new关键字即可完成。
  2. 使用完之后,对内存的释放,在JVM中,由垃圾回收器(Garbage Collection,GC)来完成。
  3. 不同类型的GC,在JVM中,会根据不同的算法,对不同的内存区域内标记为垃圾的空间,进行回收释放。在这个过程中,是不需要编程人员干预的,它自己会主动的完成。

六、字节码验证

编写好的java代码,编译成class文件(字节码)后,再被JVM加载到内存中的时候,是需要做字节码验证的
  1. 一个class文件被加载到JVM内存之后,首先要经过字节码验证
  • 检查当前class文件的版本和JVM的版本是否兼容
  • 检查当前代码是会破坏系统的完整性
  • 检查当前代码是否有栈溢出的情况
  • 检查当前代码中的参数类型是否正确
  • 检查当前代码中的类型转换操作是否正确
  1. 验证通过后,再确定代码的执行方式
  • 解释执行
    class文件内容,需要让JVM进行解释,解释成计算机可以执行的代码。整体效果就是JVM解释一行代码就执行一行代码。所以如果java代码全是这样的运行方式的话,效率会稍低一些。
  • JIT(Just In Time)即时编译
    执行代码的另一种方式,JVM可以把java中的 热点代码 直接编译成计算机可以运行的代码,这样接下来再调用这个热点代码的时候,就可以直接使用编译好的代码让计算机直接运行,可以提高运行效率。

常用的命令
javac——编译命令
java——运行命令
javadoc——生成API文档命令
javap——反解析命令,可以解析出class字节码文件的内容
jar——打包命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我会尽力回答你的问题。针对USB接口程序设计,我们需要先了解一些基础知识: 1. USB是什么? USB(Universal Serial Bus)是一种用于连接计算机与外部设备的串行总线标准,可用于数据传输、充电和供电等多种用途。 2. USB接口类型 USB接口按照接口类型分为USB Type-A、USB Type-B、mini-USB、micro-USB等多种类型。 3. USB接口规范 USB接口规范包括USB1.0、USB2.0、USB3.0等多个版本,每个版本都有自己的传输速度和功能特性。 在了解了上述基础知识后,我们可以开始设计USB接口程序。具体步骤如下: 1. 定义一个接口类Usb,在该类中定义一个抽象方法,用于实现数据传输功能。 ```java public interface Usb { void transferData(); } ``` 2. 定义一个USB设备类,该类实现了Usb接口,并实现了接口中的抽象方法,用于实现具体的数据传输功能。 ```java public class UsbDevice implements Usb { @Override public void transferData() { System.out.println("USB设备传输数据"); } } ``` 3. 定义一个主机类,该类也实现了Usb接口,但是该类的transferData方法中不是实现传输数据的功能,而是调用USB设备类的transferData方法,从而实现数据传输。 ```java public class Host implements Usb { private Usb usbDevice; public Host(Usb usbDevice) { this.usbDevice = usbDevice; } @Override public void transferData() { usbDevice.transferData(); } } ``` 4. 在主函数中实例化USB设备类和主机类,并调用主机类的transferData方法,从而实现数据传输。 ```java public static void main(String[] args) { UsbDevice usbDevice = new UsbDevice(); Host host = new Host(usbDevice); host.transferData(); } ``` 这样,我们就完成了一个简单的USB接口程序设计。当然,实际情况中,USB接口程序可能会更加复杂,需要考虑更多的因素,例如不同类型的USB接口、不同版本的USB规范等等。同时,我们还需要注意USB接口程序的稳定性和可靠性,以确保程序的正常运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值