Java程序设计基础(修改)

Java程序设计基础(修改)

Java最早是由SUN公司(2009年4月被Oracle收购)的James Gosling(詹姆斯·高斯林Java之父)在上个世纪90年代初开发的一种编程语言,最初被命名为Oak,在1995年以Java的名称正式发布,1995年5月23日Java语言诞生。

1999年6月Java又分出了三个不同版本:

Java SE:Standard Edition

Java EE:Enterprise Edition

Java ME:Micro Edition

Java SE就是标准版,包含标准的JVM和标准库,而Java EE是企业版,它只是在Java SE的基础上加上了大量的API和库,以便方便开发Web应用、数据库、消息服务等,Java EE的应用使用的虚拟机和Java SE完全相同。

Java ME就和Java SE不同,它是一个针对嵌入式设备的“瘦身版”,Java SE的标准库无法在Java ME上使用,Java ME的虚拟机也是“瘦身版”,不幸的是,Java ME从来没有真正流行起来。

Java SE是整个Java平台的核心,而Java EE是进一步学习Web应用所必须的。学习Java 应从Java SE入手。2018年9月25日,Java SE 11这个重要版本发布,现在学习应从它开始。JDK 11 官方文档 JDK 11 Documentation - Home

Java 入门-Oracle 技术网 技术资源 | Oracle 中国

编写Java程序注意事项

编写Java程序前应注意以下几点:

大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。

源文件名:如果代码文件中若没有public class,则文件名可以与类名不同,若有保存文件时,应使用类名保存它(记住Java区分大小写)并在名称的末尾使用扩展名称.java,否则会导致编译错误。假设是public class,类名是MyProgram,那么该文件应保存为:MyProgram.java。

主(main)方法入口:所有的Java程序由public static void main(String[] args)方法开始执行。

建议类名的首字母大写,方法名以小写字母开头。

Java 语言是区分大小写的

Java 语言是区分大小写的,也称为大小写敏感,不管是命名变量还是使用关键字。在 Java 中,关键字都是小写的。对于变量名,函数名、函数参数等,需要区分大小写,区分大小写,如A和a是两个不同的变量。

标识符(identifier)

标识符指的是用来识别各种值的合法名称。最常见的标识符有:变量名,函数名。在Java中对象,变量、函数名都是区分大小写的。

标识符命名规则

第一个字符可以是任意 Unicode 字母(运算符、数字除外),以及美元符号($)和下划线(_)。后面的字符可以用数字。Unicode字符包含汉字,故Java标志符可以是中文,但不提倡。关于Unicode 参见https://liyucang-git.github.io/2019/06/17/彻底弄懂Unicode编码/

关键字不能用作标识符,Java关键字是Java语言保留供内部使用的,如class用于定义类。关键字也称作保留字。组成关键字的字母全部小写。注:goto和const作为保留字存在,目前并不使用。main并不是关键字。

Java标识符命名一般遵守如下规范:

类名:通常使用名词,所有单词首字母大写。例如:StudentFamily。

方法名:通常使用动词,首单词字母小写,后续单词首字母大写。例如:openGrade()。

变量名:首单词字母小写,后续单词首字母大写。例如:studentName。

常量名:所有字母都大写。例如:PI

Java中的标点符号

Java使用的标点符号,如()"" '' + - * /:,等等是半角英文的,字符串中(字符串内部)的除外。新手要特别注意这点。

【全角和半角

☆全角:是一种电脑字符,占两个字节。

在全角中,字母和数字等与汉字一样占据着等宽的位置。

☆半角:是指一个字符占一个字节。

半角是ASCII方式的字符。

注释

Java 支持以下三种注释方式:一行注释以双斜杠“//”标识;多行注释包含在“/*”和“*/”之间;文档注释包含在“/**”和“*/”之间。

1)单行注释

以双斜杠“//”标识,只能注释一行内容,用在注释信息内容少的地方。

2)多行注释

包含在“/*”和“*/”之间,能注释很多行的内容。为了可读性比较好,一般首行和尾行不写注释信息(这样也比较美观好看),如图 2 所示。

注意:多行注释可以嵌套单行注释,但是不能嵌套多行注释和文档注释。

3)文档注释

包含在“/**”和“*/”之间,也能注释多行内容,一般用在类、方法和变量上面,用来描述其作用。注释后,鼠标放在类和变量上面会自动显示出我们注释的内容

注意:文档注释能嵌套单行注释,不能嵌套多行注释和文档注释,一般首行和尾行也不写注释信息。

如:

/**

 文档注释的描述。

 @作者(你的名字)

 @版本(一个版本号或者一个日期)

 */

public class HelloWorld {

   /* 这是一个Java程序

     这是一个多行注释的示例

    */

    public static void main(String[] args){

       // 这是单行注释的示例

       System.out.println("Hello World");

    }

}

表达式、语句和语句块

Java表达式(Expression)是变量、常量、运算符、方法调用的序列,它执zhi行指定的计算并返回某个确定的值。

按操作数的数目可分为:有一元运算符(++、--)、二元运算符(+、-、>等等)和三元运算符(?:),它们分别对应一到三个操作数。

按运算结果可分为:算术表达式(12.1f+8.3f、i++)、关系表达式(3>7、3<7)、布尔逻辑表达式((5>4)&&true、!false)、位运算表达式(a=34^3)等。

语句(Statement)构成一个完整的执行单元。简单语句用分号(;)终止,如:

iValue = 10; // 赋值语句

double aValue = 8933.234; // 声明语句

System.out.println("Hello World!"); // 方法调用语句

Bicycle myBike = new Bicycle(); // 对象创建语句

控制流语句用于调节语句执行的顺序, 控制流语句包括条件语句、 循环结构 、条件语句、 switch case,后续介绍。

块(Blocks)也称为复合语句,由位于两个大括号之间的0个或者多个语句的组合,可以用于单个语句允许使用的任何地方。语法格式如下:

{

    statement-list // 语句列表

}

statement-list 是由一个或者多个语句组成的列表,如果不存在 statement-list,则称该语句块是空的。

关于达式(Expression)、语句(Statement)和语句块(Blocks),可参见Expressions, Statements, and Blocks https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html

变量

变量指在程序执行的过程中,在某个范围内其值可以发生改变的量。

【A variable is a storage location and has an associated type, sometimes called its compile-time type, that is either a primitive type (§4.2) or a reference type (§4.3).【变量是一种存储位置,并与一种类型相关联,有时也称为编译时类型,该类型要么是基本类型(§4.2),要么是引用类型(§4.3)。】Chapter 4. Types, Values, and Variables

变量定义格式:数据类型 变量名 = 初始化值;

Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间。变量按数据类型划分:

引用类型中还有一种特殊的null类型。

【基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构。基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型,还可以操作这种数据类型的行为。Java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,而对于引用类型变量,它以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。】

变量按被声明的位置划分:

局部变量:方法或语句块内部定义的变量成员变量:方法外部、类的内部定义的变量。

注意:在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。参见 Java学习总结--字符串String类和基本的数据类型有什么区别_string 类型与基本数据类型的区别?_lhj_sjtu的博客-CSDN博客

创建字符串最简单的方式如下:

String greeting = "我的教程";

String类型是不可变的,其内容是不可修改的;如以下代码片段:

String s = "java";

s = "abc123";  //编译时报错

变量的作用域和生存期,在此简单一说,后续还将介绍:

变量的作用域:

    作用域从变量定义的位置开始,到该变量所在的那对大括号结束。

生命周期:

    变量从定义的位置开始就在内存中活了;

    变量到达它所在的作用域的时候就在内存中消失了。

语句太长如何换行

Java默认自动换行功能,只要你不把标识符关键字断开就行,字串肯定不能直接断开写,可分成几部分用+运算符连接, 例如:

public class HelloWorld {

      public static void //故意在此换行

      main(String[] args) {

          String str ="Java 可运行于多个平台," +

          "Windows, Mac OS 及其他多种 UNIX 版本的系统。"; //字符串的换行

          System.out.println(str);

      }

}

使用BlueJ建立新类,名称为:HelloWorld,输入上述的代码,参见下图:

运行之,参见下图:

Java程序的组织结构

下面介绍Java程序的组织结构,对于这一部分,有个总体上的大体了解即可,先不必深究,随着学习的深入,将会逐步理解。

Java程序是由类和接口组成的。

一个简单的java程序,有一个类即可。

一个简单的类,可以仅包含一个入口方法public static void main(String[] args),如下:

public class类名{

  …

  publicstatic void main(String[] args){

  …

  }

}

一个比较完整java程序包括下列部分

package语句;

import语句;

publicClassDefinition; // 公共的类定义部分,至多只有一个公共类的定义

// java语言规定该java源程序的文件名必须与该公共类名完全一致

classDefinition;// 类定义部分,可以有0个或多个

interfaceDefinition;// 接口定义部分,可以有0个或多个

一般地,具有相同功能的类放在一个package中。

一个java源程序至多只能有一个公共类(public类)的定义。

若java源程序有一个公共类的定义,则该源文件名字必须与该公共类的名字完全相同。

若源程序中不包含公共类的定义,则源该文件名可以任意取名。

若一个源程序中有多个类定义,则在编译时将为每个类生成一个.class文件(以类名为文件名,以.class作为扩展名,扩展名也称为后缀)。

java源文件又称为编译单元。一个java文件可以包含多个类,但至多包含一个公共类(public类),作为该java文件的公用接口,公共类的名字和源文件的名字要相同,但后缀为.java。

一个java文件中,在不同类中,是可以有多个public static voidmain(String[] args)。

【public static voidmain(String[] args),这是 Java 程序的入口地址,Java 虚拟机运行程序的时候首先找的就是 main 方法。跟 C 语言里面的 main() 函数的作用是一样的。只有有 main() 方法的 Java 程序才能够被 Java 虚拟机运行,可理解为规定的格式。在前一篇中已介绍。】

示例如下:

package lc01;

public class cs {

    cs(){

        System.out.println("你好啊! world!");

    }

    public static void main(String[] args) {

        new cs();

    }

}

class a{

    public static void main(String[] args){

    }

}

但是,对于一个Java程序而言,往往只需要一个入口,也就是只需要有一个类包含main方法,而其他类都是用于被main方法直接或间接调用的。

如果一个java源程序中含有public的类,则文件名必须与类名一致,如果没有public类,则文件可以随意命名。一个文件中,public的类可以有零个或一个,非public的类可以有零个或多个。

又,public static void main()不是必须要放在public类中,如

package lc01;

class Dog{

     Dog(){ 

         System.out.println("I'm a dog."); 

     } 

     public static void main(String[] args){

         new Dog(); 

         new Cat(); 

     } 

class Cat{

     Cat(){ 

         System.out.println("I'm a cat."); 

     } 

}  

文件中没有一个public类,程序也能正常运行。

Java包、公共类与Java源码文件的关系

包(package)是一个为了方便管理组织java文件的组织和管理方式。包内包含有一组类。可以使用import关键字来导入一个包。例如使用import java.util.*就可以导入java.util包里面的所有类。所谓导入这个包里面的所有类,就是在import声明这个包名以后,在接下来的程序中可以直接使用该包中的类。

一个Java源代码文件必须有一个后缀名.java,此文件通常被称为编译单元。在编译单元内有且仅有一个public类,否则编译器就不会接受。该public类的名称必须与文件的名称相同(包括大小写,但不包括后缀名.java)。

当编译一个.java文件(即一个编译单元)时,在.java文件中的每个类都会有一个输出文件,而该输出文件的名称与.java文件中每个类的名称相同,只是多了一个后缀名.class。因此在编译少量.java文件之后,会得到大量的.class文件。每个.java文件都是一个构件,如果希望许许多多的这样的构件从属于同一个群组,就可以在每一个.java文件中使用关键字package。而这个群组就是一个包。

 例如,假设文件的名称是Apple.java,这就意味着在该文件中有且仅有一个public类,该类的名称必须是Apple(注意大小写):

package fruit;

public class Apple

{

      //...

}

上面的代码已经将Apple类包含在了fruit包中,现在如果有人想使用Apple或者是fruit中的任何其他public类,就必须使用关键字import来使fruit中的名称可用。

import fruit.*;

public class ImportApple

{

     public static void main(String[] args)

      {

           Apple a=new Apple();

      }

}

或者使用带包名的限定名称:

public class QualifiedApple

{

     public static void main(String[] args)

      {

           fruit.Apple a=new fruit.Apple();

      }

}

显然使用关键字import使代码更加简洁。

一个项目(Project)可以有几个包,包是为了更好的规划整理你写的各个类,将相关的类放在一个包中。包是为了更好的规划整理你写的各个类。

包(package)的作用

1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

2 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。

3 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

java使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。

在Java源文件中,如果使用package语句,则package语句应作为第一条可执行语句(它的前面只能有注释或空行),指明该源文件定义的类所在的包。package语句的一般格式为:

package  包名;

包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成,包的名字有层次关系,各层之间以点分隔。包层次必须与Java开发系统的文件系统结构相同。例如 packageaaa.bb.image

则此文件必须存放在aaa\bb\image目录下

如果源程序中省略了package语句,源文件中所定义命名的类被隐含地认为是无名包,即源文件中定义命名的类在同一个包中,但该包没有名字。

包(package)分为无名包和有名包,无名包的好处是无需对包作任何声明,可以拿来方便快捷使用,但也因为无名包没有名字,所以其它包无法用import语句导入访问无名包中的类,所以说无名包只适合在局部应用。而有名包就可以被其它包所访问,先用import语句导入,再用“包名.类名”方式访问指定包中指定的类。

Import语句

在Java中,如果给出一个完整的限定名,包括包名、类名,那么Java编译器就可以很容易地定位到源代码或者类。Import语句就是用来提供一个合理的路径,使得编译器可以找到某个类。

例如:import java.io.*;

导入包的方式:

①、单类型导入(single-type-import),例如import java.util.Date

②、按需类型导入(type-import-on-demand),例如import java.util.*

单类型导入比较好理解,我们编程所使用的各种工具默认都是按照单类型导包的,需要什么类便导入什么类,这种方式是导入指定的public类或者接口;

③、按需类型导入,比如 import java.util.*,可能看到后面的 *,大家会以为是导入java.util包下的所有类,其实并不是这样,我们根据名字按需导入要知道他是按照需求导入,并不是导入整个包下的所有类。按需类型导入是绝对不会降低Java代码的执行效率的,但会影响到Java代码的编译速度。

系统包

Java SE 提供了一些系统包,其中包含了 Java 开发中常用的基础类。在 Java 语言中,开发人员可以自定义包,也可以使用系统包,常用的系统包如下表:

说明

java.lang

Java 的核心类库,包含运行 Java 程序必不可少的系统类,如基本数据类型、基本数学函数、
字符串处理、异常处理和线程类等,系统默认加载这个包

java.io

Java 语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等

java.util

包含如处理时间的 Date 类,处理动态数组的 Vector 类,以及 Stack 和 HashTable 类

java.awt

构建图形用户界面(GUI)的类库,低级绘图操作 Graphics 类、图形界面组件和布局管理
(如 Checkbox 类、Container 类、LayoutManger 接口等),以及用户界面交互控制和事
件响应(如 Event 类)

java.awt.image

处理和操纵来自网上的图片的 Java 工具类库

java.wat.peer

很少在程序中直接用到,使得同一个 Java 程序在不同的软硬件平台上运行

java.net

实现网络功能的类库有 Socket 类、ServerSocket 类

java.lang.reflect

提供用于反射对象的工具

java.util.zip

实现文件压缩功能

java.awt.datatransfer

处理数据传输的工具类,包括剪贴板、字符串发送器等

java.sql

实现 JDBC 的类库

java.rmi

提供远程连接与载入的支持

java. security

提供安全性方面的有关支持

附录、

关于public static void main(String[] args) , 参见public static void main(String[] args) 是什么意思? https://www.cnblogs.com/guankelei/p/11327360.html

关于System.out.println(), 参见 你了解System.out.println()的真正含义吗?https://www.cnblogs.com/eniac12/p/5143160.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值