Java程序设计基础

article/2025/10/9 22:08:19

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 中国

JavaScript基本语法

编写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

变量

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

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

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


http://chatgpt.dhexx.cn/article/NcLqFn0R.shtml

相关文章

java语言程序设计-基础篇

第1章&#xff0c;计算机、程序和Java概述 包括【每个java初学者都应该搞懂的问题】 http://blog.csdn.net/haobo920/article/details/5784990 1&#xff0c;java背景 特点&#xff1a; 一次编译&#xff0c;到处运行&#xff08;Write Once, Run Anywhere.&#xff09;。 原理…

Java程序设计案例教程

目录 1. java初步 1.1 Java基础知识 1.2 创建第一个Java项目 1.3 Java API 帮助文档 1.4 小结 1. java初步 1.1 Java基础知识 1.1.1 Java编程开发简介 1.Java版本 Java SE 应用于桌面环境 桌面应用开发 …

Java程序设计入门教程--包

情形 在Java中&#xff0c;包(package)是一种松散的类的集合&#xff0c;它可以将各种类文件组织在一起&#xff0c;就像磁盘的目录&#xff08;文件夹&#xff09;一样。包的管理机制提供了类的多层次命名空间避免了命名冲突问题&#xff0c;解决了类文件的组织问题&#xff0…

JAVA语言程序设计

计算机、程序和JAVA概述 一、计算机概述和编程语言 一&#xff09;、Java语言的发展 60年代->提出对象与实例的概念&#xff0c;并引入了类。 1960年代由Simula 67语言引入面向对象的基本概念。Simula这一语言是Ole-Johan Dahl 和Kristen Nygaard在挪威奥斯陆计算机中心为…

JAVA语言程序设计基础入门技术教程

JAVA语言程序设计基础 第一章&#xff1a;JAVA入门基础–开山篇 视频&#xff1a;https://edu.csdn.net/course/detail/8034 前言&#xff1a;什么是java 是咖啡飘香的清晨是斯坦福校园意浓情深是James的思想睿智是剁手党双十一挥舞的利刃是大数据服务的平台是春运时节那期…

Java程序设计入门教程--Java语言概述

目录 1.1 Java语言诞生与发展 1.2 Java语言的特点 1.3 运行机制与虚拟机 1.1 Java语言诞生与发展 Java语言的诞生最早可以追溯至1991年&#xff0c;那时称为OAK语言&#xff0c;是SUN公司为一些消费性电子产品而设计的一个通用环境&#xff0c;其最初目的只是为了开发一种独…

Java程序设计--Java入门(一)

Java入门 1、Java概述1.1 Java语言发展史1.2 Java语言跨平台原理1.3 JRE和JDK1.4 JDK的下载和安装 2. 入门程序HelloWorld2.1 常用DOS命令2.2 Path环境变量的配置2.3 HelloWorld案例2.4 HelloWorld案例常见问题 3、IDEA安装使用3.1 IDEA概述、安装3.2 IDEA编写程序3.3 IDEA设置…

Java程序设计教程(第3版)雍俊海 全书例程-2

p301随手画面板例程 import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.Graphics; import java.awt.Point; import java.util.Vector; import javax.swing.JPan…

Java程序设计教程及实验指导(个人笔记)

文章目录 第一章Java语言概述第二章Java编程基础第三章Java类与对象第四章 继承与多态性第五章 异常处理第六章 Java常用类第七章 泛型与集合第八章 多线程第九章 Java I/O流第十章 图形用户界面第十一章 网络编程第十二章 数据库编程JDBC 第一章Java语言概述 一、实验操作 1、…

C++ostream的使用

在 C中&#xff0c;ostream表示输出流&#xff0c;英文”output stream“的简称。在 C中常见的输出流对象就是标准输出流cout&#xff0c;很少自定义ostream的对象&#xff0c;更多的是直接使用cout。那么 ostream 有什么用呢&#xff0c;来看一个场景&#xff1a; class CPoi…

istream_iterator和ostream_iterator学习体会

istream_iterator 在<iterator>头文件的定义中 定义istream_iterator变量的方法为 istream_iterator<T> in(strm); (其中T指明此istream_iterator的输入类型 , strm为istream_iterator指向的流) 提供了输入操作符&#xff08;>>&#xff09;和 输出操作…

Stream

Java8 的 Stream 流&#xff0c;加上 Lambda 表达式&#xff0c;可以让代码变短变美&#xff0c;还是变短变丑&#xff1f; 距离Java 8发布已经过去了7、8年的时间&#xff0c;Java 19也发布了。Java 8中关于函数式编程和新增的Stream流API至今饱受“争议”。 如果你不曾使用…

istream_iterator 和 ostream_iterator

C primer代码学习 通过istream_iterator 绑定标准输入 cin 通过ostream_iterator 绑定标准输出 cout #include <iterator> using std::istream_iterator; using std::ostream_iterator;#include<vector> using std::vector;#include<iostream> using std::c…

C++重载istream和ostream

对于一般的运算符重载&#xff0c;可以重载为类的成员函数&#xff0c;这是因为操作符的第一个元素一定是本类的对象&#xff08;this&#xff09; 例如 #include<iostream> using namespace std;class book { public:book (int n):bookNo(n) {}int getBookNo () {retu…

【C++初阶】ostream、operater<<、operator<<(ostream _cout, const Date d)、bool引导的结构体内嵌比较函数解析

对C重载、判断部分的知识进行梳理 目录 一、bool operator>(const Date& d) const【bool引导的结构体内嵌比较函数】 1.代码整体含义 2.代码两个const的含义 二、friend ostream& operator<<(ostream& _cout, const Date& d) 1. 相关基础概念 …

C++ iostream、ostream、istream等标准库都是什么?看完这篇就知道了

目录 iostream 库组成基本类模板类模板实例标准对象类型操纵符 源码 ostream 库istream 库fstream 库ios 库 我们在写C代码的时候&#xff0c;总会用到 iostream 库&#xff0c;这是C的标准库&#xff0c;几乎每个程序都会用到它&#xff08;有一些人则会用 cstdio &#xff…

C++之 ostream详细用法

概述 在 C中&#xff0c;ostream表示输出流&#xff0c;英文”output stream“的简称。在 C中常见的输出流对象就是标准输出流cout&#xff0c;很少自定义ostream的对象&#xff0c;更多的是直接使用cout。那么 ostream 有什么用呢&#xff0c;来看一个场景&#xff1a; clas…

Simple_SSTI_1

Simple_SSTI_1&#xff1a; 打开题目 查看一下网页源代码 flag在secret_key下 以get方式传递参数flag{{config.SECRET_KEY}}即得到flag。 也就是114.67.246.176.12930/?flag{{config.SECRET_KEY}} SECRET_KEY是config配置里面的一个值 告自己&#xff1a;要先截图再提交flag…

SSTI(模板注入) 解析 和 ctf 做法

基础知识补充&#xff1a; __class__ 返回类型所属的对象__mro__ 返回一个包含对象所继承的基类元组&#xff0c;方法在解析时按照元组的顺序解析。__base__ 返回该对象所继承的基类// __base__和__mro__都是用来寻找基类的__subclasses__ 每个新类都保留了子类的引用&#xff…

SSTI注入————php的SSTI

SSTI 就是服务器端模板注入&#xff08;Server-Side Template Injection&#xff09; ​ 当前使用的一些框架&#xff0c;比如python的flask&#xff0c;php的tp&#xff0c;java的spring等一般都采用成熟的的MVC的模式&#xff0c;用户的输入先进入Controller控制器&#xff0…