首页 > 编程语言 >Java学习-2.简介、关键字、标识符、变量、数据类型、运算符

Java学习-2.简介、关键字、标识符、变量、数据类型、运算符

时间:2023-07-29 17:45:00浏览次数:52  
标签:字符 Java 变量 数据类型 运算符 字符串 类型 java

一、Java简介

Java最早是由SUN公司(已被Oracle收购)的詹姆斯·高斯林(高司令,人称Java之父)在上个世纪90年代初开发的一种编程语言,最初被命名为Oak,目标是针对小型家电设备的嵌入式应用,结果市场没啥反响。谁料到互联网的崛起,让Oak重新焕发了生机,于是SUN公司改造了Oak,在1995年以Java的名称正式发布,原因是Oak已经被人注册了,因此SUN注册了Java这个商标。随着互联网的高速发展,Java逐渐成为最重要的网络编程语言。

随着Java的发展,SUN给Java又分出了三个不同版本:

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

  • Java SE:Standard Edition,标准版,包含标准的JVM和标准库
  • Java ME:Micro Edition,它是一个针对嵌入式设备的“瘦身版”,Java SE的标准库无法在Java ME上使用,Java ME的虚拟机也是“瘦身版”。

┌───────────────────────────┐
│Java EE                    │
│    ┌────────────────────┐ │
│    │Java SE             │ │
│    │    ┌─────────────┐ │ │
│    │    │   Java ME   │ │ │
│    │    └─────────────┘ │ │
│    └────────────────────┘ │
└───────────────────────────┘

 

Java介于编译型语言和解释型语言之间。编译型语言如C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。解释型语言如Python、Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低。而Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。当然,这是针对Java开发者而言。对于虚拟机,需要为每个平台分别开发。为了保证不同平台、不同公司开发的虚拟机都能正确执行Java字节码,SUN公司制定了一系列的Java虚拟机规范。从实践的角度看,JVM的兼容性做得非常好,低版本的Java字节码完全可以正常运行在高版本的JVM上。

 

JRE(Java Runtime Environment    Java运行环境):包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。

JDK(Java Development Kit    Java开发工具包):JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。其中的开发工具:编译工具(javac.exe)  打包工具(jar.exe)等

简单而言:使用JDK开发完成的java程序,交给JRE去运行。

二者关系如下:

  ┌─    ┌──────────────────────────────────┐
  │     │     Compiler, debugger, etc.     │
  │     └──────────────────────────────────┘
 JDK ┌─ ┌──────────────────────────────────┐
  │  │  │                                  │
  │ JRE │      JVM + Runtime Library       │
  │  │  │                                  │
  └─ └─ └──────────────────────────────────┘
        ┌───────┐┌───────┐┌───────┐┌───────┐
        │Windows││ Linux ││ macOS ││others │
        └───────┘└───────┘└───────┘└───────┘

 

Java语言特点:

  • 简单性
  • 解释性
  • 面向对象
  • 高性能
  • 分布式处理
  • 多线程
  • 健壮性
  • 动态
  • 结构中立
  • 安全性
  • 开源
  • 跨平台:通过Java语言编写的应用程序在不同的系统平台上都可以运行。原理:只要在需要运行java应用程序的操作系统上,先安装一个java虚拟机JVM即可。

 

程序解析:

  • 首先编写java源代码程序,扩展名.java
  • 在命令行模式中,输入javac命令对源代码进行编译,生成字节码文件 : javac 源文件名.java
  • 编译完成后,如果没有报错信息,输入java命令对class字节码文件进行解释运行,执行时不需要添加.class扩展名:java HelloWorld

运行原理:

一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致;

使用javac可以将.java源码编译成.class字节码;

使用java可以运行一个已编译的Java程序,参数是类名。

 

 

二、基础语法

1.关键字和标识符

关键字:被Java语言赋予特定含义的单词
关键字特点:组成关键字的字母全部小写
关键字注意事项:goto和const作为保留字存在,目前并不使用。类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观。

 

标识符:就是给类,接口,方法,变量等起名字时使用的字符序列。

组成规则:
  英文大小写字母
  数字字符
  $和_
注意事项:
  不能以数字开头
  不能是Java中的关键字
  区分大小写

常见命名规则:

  1. 变量名(驼峰命名法):变量的名字可大小写混用,但首字符应小写。词由大写字母分隔,限制用下划线,限制使用美元符($),因为这个字符对内部类有特殊的含义。如:inputTextSize。
  2. 包名:应该都是由一个小写单词组成。如:net.test.modules。
  3. 类名:每个单词的首字母都要大写,通常由多个单词合成一个类名。如:DataFile、InfoParser。
  4. 接口名:与类的命名一致,因为接口也是类的一种。
  5. 常量名:常量命名则前面应该是static final,后面变量的名字全部大写。如:static final MAX = 1024。常量名通常全部大写。
  6. 方法名:第一个单词应该是动词,但首字母小写,后面每个单词的首字母大写。大写字母将词分隔并限制使用下划线。方法如果有传入参数,参数的名字必须和变量的命名规范一致。使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字。

2. 注释

// 单号注释

/* */ 多行注释

/** */ 文本注释

 

3.变量和数据类型

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

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

1:从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必须要先申请(声明),然后必须进行赋值(填充内容),才能使用。
    数据类型,变量名,变量值
2:为什么要定义变量呢
    用来不断的存放同一类型的常量,并可以重复使用

var关键字:如果想省略变量类型,可以使用var关键字。编译器会根据赋值语句自动推断出变量的类型。

定义变量时,要遵循作用域最小化原则,尽量将变量定义在尽可能小的作用域,并且,不要重复使用变量名。

 

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

除了上述基本类型的变量,剩下的都是引用类型。例如,引用类型最常用的就是String字符串

byte:-128 ~ 127
short: -32768 ~ 32767
int: -2147483648 ~ 2147483647
long: -9223372036854775808 ~ 9223372036854775807

Java语言对布尔类型的存储并没有做规定,因为理论上存储布尔类型只需要1 bit,但是通常JVM内部会把boolean表示为4字节整数。

整数默认:int    小数默认:double

Java 各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以保证Java程序的可移植性。
Java语言的整型常量默认为int型,声明long型常量可以后加‘ l ’或‘ L ’ ,如:
       int i1 = 600; //正确     long l1 = 88888888888L; //必须加l否则会出错

特别注意:整数的除法对于除数为0时运行时将报错,但编译不会报错。

整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错,却会得到一个奇怪的结果。

 

与整数类型类似,Java浮点类型有固定的表数范围和字段长度,不受平台影响。
Java 浮点类型常量有两种表示形式
      十进制数形式,如: 3.14       314.0
科学记数法形式,如 3.14e2 3.14*10^2
Java 浮点型常量默认为 double 型,如要声明一个常量为 float 型,则需在数字后面加 f 或 F ,如:
double d = 12345.6; //正确   float f = 12.3f; //必须加f否则会出错

在计算机中,浮点数虽然表示的范围大,但是,浮点数有个非常重要的特点,就是浮点数常常无法精确表示。

浮点数0.1在计算机中就无法精确表示,因为十进制的0.1换算成二进制是一个无限循环小数,很显然,无论使用float还是double,都只能存储一个0.1的近似值。但是,0.5这个浮点数又可以精确地表示。

因为浮点数常常无法精确表示,因此,浮点数运算会产生误差。

需要特别注意,在一个复杂的四则运算中,两个整数的运算不会出现自动提升的情况。

double d = 1.2 + 24 / 5; // 5.2

整数运算在除数为0时会报错,而浮点数运算在除数为0时,不会报错,但会返回几个特殊值:

  • NaN表示Not a Number
  • Infinity表示无穷大
  • -Infinity表示负无穷大
double d1 = 0.0 / 0; // NaN
double d2 = 1.0 / 0; // Infinity
double d3 = -1.0 / 0; // -Infinity

 

char 型数据用来表示通常意义上的“字符”
字符常量为用单引号括起来的单个字符,例如:char ch1= 'a'; char ch2='中';
Java 字符采用 Unicode 编码,每个字符占两个字节,因而可用十六进制编码形式表示。注:Unicode是全球语言统一编码

一个英文字符和一个中文字符都用一个char类型表示,它们都占用两个字节。要显示一个字符的Unicode编码,只需将char类型直接赋值给int类型即可。

int n1 = 'A'; // 字母“A”的Unicodde编码是65
int n2 = '中'; // 汉字“中”的Unicode编码是20013
// 注意是十六进制:
char c3 = '\u0041'; // 'A',因为十六进制0041 = 十进制65
char c4 = '\u4e2d'; // '中',因为十六进制4e2d = 十进制20013

字符串类型:用双引号"..."表示字符串

常见转义字符包括:

  • \" 表示字符"
  • \' 表示字符'
  • \\ 表示字符\
  • \n 表示换行符
  • \r 表示回车符
  • \t 表示Tab
  • \u#### 表示一个Unicode编码的字符

从Java 13开始,字符串可以用"""..."""表示多行字符串(Text Blocks)了。

String s = """
                   SELECT * FROM
                     users
                   WHERE id > 100
                   ORDER BY name DESC
                   """;  //上述多行字符串实际上是5行,在最后一个DESC后面还有一个\n。
String s = """
...........SELECT * FROM
...........  users
...........WHERE id > 100
...........ORDER BY name DESC
...........""";

//多行字符串前面共同的空格会被去掉
//如果多行字符串的排版不规则,那么,去掉的空格就会变成这样
String s = """
.........  SELECT * FROM
.........    users
.........WHERE id > 100
.........  ORDER BY name DESC
.........  """;
//即总是以最短的行首空格为基准。

Java的字符串除了是一个引用类型外,还有个重要特点,就是字符串不可变。基本类型的变量是“持有”某个数值,引用类型的变量是“指向”某个对象;

public class Main {
    public static void main(String[] args) {
        String s = "hello";
        String t = s;
        s = "world";
        System.out.println(t); // t是"hello"
    }
}

引用类型的变量可以指向一个空值null,它表示不存在,即该变量不指向任何对象。

String s1 = null; // s1是null
String s2 = s1; // s2也是null
String s3 = ""; // s3指向空字符串,不是null

注意要区分空值null和空字符串"",空字符串是一个有效的字符串对象,它不等于null

 

boolean 类型适于逻辑运算,一般用于程序流程控制 。
boolean 类型数据只允许取值 true 或 false ,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。

 

使用变量注意事项:
作用域:变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域中不能定义两个同名变量。
初始化值:没有初始化值不能直接使用。
在一行上建议只定义一个变量,可以定义多个,但是不建议。

 

+是一个运算符, 我们应该能够看懂,做数据的加法。
boolean类型不能转换为其他的数据类型
默认转换
    byte,short,char—int—long—float—double
    byte,short,char相互之间不转换,他们参与运算首先转换为int类型
强制转换
    目标类型 变量名=(目标类型)(被转换的数据);

一般建议,最好不要随意使用强制类型转换,容易造成数据精度的损失。
    (1)容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。
    (2)有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。

 可以将浮点数强制转型为整数。在转型时,浮点数的小数部分会被丢掉。如果转型后超过了整型能表示的最大范围,将返回整型的最大值。

public class Main {
    public static void main(String[] args) {
        System.out.println('a'); //a
        System.out.println('a'+1); //98

        System.out.println("hello"+'a'+1);  //helloa1
        System.out.println('a'+1+"hello");//98hello
        System.out.println("5+5="+5+5);//5+5=55
        System.out.println(5+5+"=5+5"); //10=5+5

        byte b1=3,b2=4,b;
        b=b1+b2; //不可以,是因为b1和b2是变量,因为变量的值会变化,不确定具体的值,所以默认使用int类型进行存储。
        b=3+4;   //3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。
    }
}
//任何数据和字符串进行操作,结果都是字符串类型。但是要注意运算的顺序。

 

 4.运算符

 

 除法的时候要注意一个问题:
  整数相除,只能得到整数
  要想得到小数,可以*1.0

 

赋值运算符:

short s=1;s = s+1; //错
short s=1;s+=1;//对

 

 

 比较运算符“==”不能误写成“=”

 

 位运算是直接对二进制进行运算。

 

 

 三目运算符格式:(关系表达式)?表达式1:表达式2;
    如果条件为true,运算后的结果是表达式1;
    如果条件为false,运算后的结果是表达式2;

 

键盘录入数据:

//如何实现键盘录入数据呢?(目前先记住使用)
//导包(位置放到class定义的上面)
import java.util.Scanner;
//创建对象
Scanner sc = new Scanner(System.in);
//接收数据
int x = sc.nextInt();

 

标签:字符,Java,变量,数据类型,运算符,字符串,类型,java
From: https://www.cnblogs.com/highlightyys/p/17589882.html

相关文章

  • Java面试题 P14:java面试简历如何写
    1、简历整体结构一份完整的简历应该包括如下几个部分:1、基本信息2、教育背景3、求职意向4、工作经历5、执业技能6、项目经历7、个人优势8、个人荣誉2、执业技能:   3、项目经历: ......
  • JavaWeb之Servlet入门版教务系统(一)
    本次要分享的内容是使用Servlet技术实现最简单的从页面到后台的一个简化版的教务系统功能模块。在讲述系统之前,首先需要了解一下JavaWeb中的MVC分层重要思想,请看下图:MVC分层思想把软件系统分为View(视图层),Controller(控制层),Model(模型层),通过这三层结构。让页面请求必须通过控制......
  • 基于JAVA的佳乐福购物商城
    本系统主要是提供给大一个购买商品的平台和管理商品的佳乐福购物商城,通过价格优势吸引众多消费者来购买,实现正常运营。本文主要是采用JAVA语言、jsp技术、Sqlserver数据库、tomcat服务器作为开发平台,系统采用B/S结构进行开发,完成一个佳乐福购物商城。目标是实现一个以销售为中心的......
  • 基于JAVA的小区智能停车位管理系统
    随着小区自动化和信息化程度的不断提升,停车位管理受到越来越多小区的重视,为了方便小区停车位管理难的问题,小区物业急需一套小区智能停车位管理系统。智能停车位管理系统可以通过对出入小区的车辆进行注册登记、收费管理等活动,进而实现小区信息化建设的提升。面对信息高速发展的机遇......
  • 7月25日Java学习
       ......
  • JAVA基础
    JAVA基础一 了解JAVAPascal之父NicklausWirth:“Algorithms+DataStructures=Programs”译:应用程序=算法+数据结构1.常见的Dos命令dir:列出当前目录下的文件夹md:创建目录rd:删除目录cd:进入指定目录cd..:退回上一级目录cd\:退回到根目录del:删除文件2.Java语言......
  • java中的枚举类怎么获取其值
    Java中的枚举类可以通过以下方式获取其值:获取所有的枚举值:YourEnum[]values=YourEnum.values();这个方法返回一个包含所有枚举值的数组。获取单个枚举值:YourEnumvalue=YourEnum.valueOf("ENUM_VALUE_NAME");这个方法根据枚举值的名称返回相应的枚举值。需要注意的是,如果传入......
  • Java之不可变集合
    Java之不可变集合什么是不可变集合?不可变集合就是不可被修改的集合。集合的数据项在创建的时候提供,并且在整个生命周期中都不可被改变。否则报错为什么要创建不可变集合?如果当某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的选择。或者当集合对象被......
  • Java学习-1.jdk和IntelliJ IDEA安装
    1.jdk下载与安装下载地址:https://www.oracle.com/java/technologies/downloads/#jdk20-windows 环境配置:1.我的电脑–》右键属性–》高级系统设置–》环境变量2.系统变量–》新建系统变量–》完成后点击确定3.双击系统变量下的PATH变量,新建两个路径(最下方两个)4. 新......
  • WEB漏洞—反序列化之php&java(上)
    PHP反序列化原理:---未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。---其实跟文件解析差不多,都是由于传递的恶意参数被执行(序列化和反序列化相当于加解密过程)---在反序列化的过程中自动触发了某些魔术方......