Java入门学习笔记(二)

Java编程基础

Java的基本语法格式

  1. 编写Java程序代码必须先声明一个类
[修饰符] class类名{
	程序代码}
实例
  public class HelloWorld{
  	public static void main(String[] args){
  		System.out.println("我是大只猪");
  		}
  		}	

其他修饰符
public 公共类
default 默认类(即class前什么都不加)
abstract 抽象类
fanal 不能被继承的类
static 静态类
private 只能修饰内部类,一般不推荐使用
运行结果在这里插入图片描述
一. Java中的程序可分为结构定义语句和功能执行语句
结果定义语句用于声明一个类或方法,如下

声明一个类
[修饰符] class类名{
	程序代码}
声明一个方法
public void Myname() {
System.out.println("我的名字是大只猪");
}
对象.方法名()即可调用方法

在这里插入图片描述
调用方法,必须创建一个类。
功能执行语句,如下

System.out.println("我是大只猪!");

每条功能执行语句的结尾都必须用英文分号‘;’ 结束;
否则,如图在这里插入图片描述
二、Java语言是完全严格区别大小写的
例如Pig 和 pig是完全两个不同的符号;
否则在这里插入图片描述
类名和文件名不同
三、Java程序中一个连续的字符串不能分开在两行中书写
如图,在这里插入图片描述

如若分开写,需要用 + 号把两段字符串相连。

二、Java中的注释

1. 单行注释
2. 多行注释
3. 文档注释

在这里插入图片描述
注释还可以嵌套
在这里插入图片描述

初学者一定要多写注释;

三、Java中的关键字

关键字是java语言中一些被赋予特定意义的一些单词,不可以把它当做标识符来使用。在java中有两个特殊的关键字goto、const,我们称这两个关键字为保留字

关键字和保留字的区别

  1. Java 的 关键字 对 Java 编译器有特殊的意义,它们用来表示一种数据类型,或者表示程序的结构等
  2. 保留字 是为 Java 预留的关键字,它们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字
    在这里插入图片描述

(Java中有51个关键字和两个保留字goto,const.关键字的作用博主在之后的学习中我们会逐一了解。)
四、标识符

我们在编程过程中,经常需要在程序中定义一些名称,如包名,类名,方法名,参数名,变量名等,这些符号的标识符。标识符可以由任意顺序的大小写字母,数字,下划线(_)和美元符号($),但标识符不能以数字开头,也不能是Java中的关键字
在这里插入图片描述
在这里插入图片描述

变量和常量

简单来说,变量是内存中的一个存储区域(内存单元),该区域有自己的名称(变量名可以理解为自己命名的标识符)和类型(数据类型),Java中每个变量必须先声明(指定变量类型和变量名),后使用, 该区域的数据可以在同一类型范围内不断变化
在这里插入图片描述

语法`

变量类型 变量名 [=初始值]`;

例子

int age = 18 ;声明一个int类型的变量并赋整数值
char g = ‘a’; 声明一个char类型的变量并赋字符值
在这里插入图片描述
加深一点点,然而程序在执行过程中会这样,局部变量、对象声明的引用会放在栈(stack内存)与方法共存亡、new出来的类或数组的实例)放在(堆heap)内存中与对象共存亡,用static修饰的静态变量以及方法放在方法区
在这里插入图片描述
例子
在这里插入图片描述

变量的数据类型

基本数据类型包括 boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)共 8 种

在这里插入图片描述

还有引用数据类型包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 (String)字符串型

Java是一门强类型的编程语言,它对变量的数据类型由严格规定。在定义变量时必须先声明变量类型,在为变量赋值时必须和变量同一类型的值,否则程序在便器期间就会出现类型匹配错误
如匹配错误
在这里插入图片描述
正常给int 赋予 整型数值。给String 赋予字符串,记得加""。其次顺序不能乱,因为软件是从上到下编译的。
在这里插入图片描述

整数数字类型变量

整数类型变量有 byte,short,int,long;整数类型变量用来存储整数,即没有小数部分的值,否则就报错

例如

在这里插入图片描述
区别,取值范围
在这里插入图片描述
注意: 不能对什么整数都long变量(理论上是没问题),宽度是指占用内存的空间,一个字节等于8个bits。

浮点数类型变量

浮点数类型变量用来存储小数数值,常用的有 float、double

取值范围在这里插入图片描述
(e后面+号和-号代表正指数和负指数)

注意: 在Java中,一个小数会被默认为double类型的值。因此在为一个float类型的变量赋值时,所赋值的后面一定要加上字母F,而Double可以加上字符D,也可以不加

在这里插入图片描述

字符类型变量

字符类型变量用于存储一个单一字符,在Java中用char表示
java中每个字符变量都会占用2个字节

可以给char赋一个单独字符’a’但需要加一对英文半角格式的单单行如

char g = 'a';

也可以给char赋予一个0-65535的整数值,如

char g = 97;

给大家看一个有趣的图

在这里插入图片描述

数字和字符居然相等,这里的==号时指存储地址相同;然而他们输出的一个是字母a字符类型变量 一个是整数类型变量。
这里我们就不得不提一下ascii码,其次,我们要知道,在计算机中,所有的数据在存储和运算时都要使用二进制数表示,例如,像a、b、c、d这样的字母以及各种符号,还有作为字符的数字,都要使用二进制数字来表示,因此需要一种二进制码与这些字符的对应关系。
而现在普遍遵守的对应关系就是ASCII编码,在这里贴几个字母的ascii码作为我们的测试对象
在这里插入图片描述

做个有趣得实验

在这里插入图片描述

我们可以将一个字符赋值给一个int变量,因为字符也是一个数字int a = ‘g’,甚至,我们可以将一个数字与一个字符在一个表达式中进行计算。

布尔类型变量

布尔类型变量用来存储布尔值,在Java中用boolean表示,该类型的变量只有两个值,即true和false

boolean pig = true; 声明一个boolean类型的变量,初始值为true;
pig = false ; 赋予一个false

变量类型转换

  1. 自动转换
    小转大,无需说明,自动转换
    占用内存小的数据类型转成占用内存大的数据类型 需要声明
int b = 3;
long c = b; 程序把int类型的变量B转换了long类型,无须特殊声明

** (数据类型自动转换占内存大小byte<short=char<int<long<float<double)**

  1. 强制类型转换
    大转小,需要说明
    占用内存大的数据类型转成占用内存小的数据类型需要声明。
    在这里插入图片描述
    大转小,需要在赋值前添加数据类型。

思考一下,下图输出的值为什么是44?
在这里插入图片描述
原因,在int类型转为byte类型过程中,原来4字节长度变为byte1字节长度,丢失了前面3节的数据
在这里插入图片描述

总结,在这里插入图片描述

变量的作用域

变量需要在它的作用范围内才可以被使用,这个作用范围被称为变量的作用域。根据作用域的不同,一般将变量分为不同的类型:类变量、局部变量、方法参数变量及异常处理参数变量

(简单理解作用域就是在大括号内的变量只能在大括号里面使用)

在这里插入图片描述

类变量

类变量也称为成员变量,声明在类中,不属于任何一个方法,作用域是整个类

在这里插入图片描述
上面例子中,在dog这个类中 ,定义了Name变量和int变量,它能在整个类中使用,即使不传形参,在输出时显示“我的名字叫null”。

局部变量

局部变量是指在方法或者方法代码块中定义的变量,其作用域是其所在的代码块(也就是所在大括号内)
在这里插入图片描述

方法参数变量

作为方法参数声明的变量的作用域是整个方法

在这里插入图片描述
下面,变量age只能方法里面起作用在方法外会报错
在这里插入图片描述
顺便理解上图中static关键字(静态变量和静态方法)

在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。

静态成员不依赖于类的特定实例,被类的所有实例共享,就是说 static 修饰的方法或者变量不需要依赖于对象来进行访问,只要这个类被加载,Java 虚拟机就可以根据类名找到它们
类的成员变量可以分为以下两种

  1. 静态变量(或称为类变量),指被 static 修饰的成员变量。
  2. 实例变量,指没有被 static 修饰的成员变量。

一丶静态变量和方法
语法

类名.静态成员或方法

例如
在这里插入图片描述

注意:静态变量

  1. 运行时,Java 虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配
  2. 在类的内部,可以在任何方法内直接访问静态变量
  3. 在其他类中,可以通过类名访问该类中的静态变量
    实例变量
    . 每创建一个实例,Java 虚拟机就会为实例变量分配一次内存
    . 在类的内部,可以在非静态方法中直接访问实例变量
    . 在本类的静态方法或其他类中则需要通过类的实例对象进行访问
    在这里插入图片描述

异常处理参数变量

异常处理参数变量的作用域是在异常处理块中,该变量是将异常处理参数传递给异常处理块(catch),与方法参数变量类似,异常处理参数

异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”
Java程序在执行过程中所发生的异常事件可分为两类
一、Error
如: JVM系统内部错误、资源 耗尽等严重情况
StackOverflowError和OOM 一般不编写针对性的代码进行处理
Java虚拟机无法解决的严重问题
二、Exception
其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理 Java开发者考虑的东西…
如:空指针访问,试图读取不存在的文件,网络连接中断,数组角标越界
而对于这些异常,我们可以进行捕获处理,我们尽可能在开发过程中考虑到可能出现的异常进行处理!
不然,如果不进行处理 直接发布,出现异常会导致,程序报错,崩掉使程序直接立刻结束
在这里插入图片描述
try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:

try {
    ...
} catch (IOException ioException) {
    ...
} catch (Exception exception) {
    ...
} finally {
    ...
}

在这里插入图片描述
try 块

try块中放可能发生异常的代码。
如果执行完try且不发生异常,则接着去执行finally块中的代码和finally后面的代码(如果有的话)。
如果程序发生异常,则尝试去匹配对应的catch块

catch 块
每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。Java7中可以将多个异常声明在一个catch中。
catch后面的括号定义了异常类型异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
在catch块中可以使用这个块的异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。
如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个方法的外部调用者中去匹配异常处理器。
如果try中没有发生异常,则所有的catch块将被忽略。
finally 块
finally块不是必须的,通常是可选的。
无论异常是否发生,异常是否匹配被处理,finally中的代码都会执行。
一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获和处理异常,处理异常的只能是catch块。
finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。
finally块不管异常是否发生,只要对应的try执行了,则它一定也执行。只有一种方法让finally块不执行:「System.exit()」

一句话总结:try块写上可能出现异常的代码,如果没有则执行try块和finally块,如果出现异常则按顺序匹配catch块里面的异常类型同时赋予一个异常变量,并执行该catch代码块

也可以通过throw关键字抛出异样
我们也可以通过 throw 语句手动显式的抛出一个异常,throw语句的后面必须是一个异常对象
语法

throw 异常对象
如throw exceptionObject

throw 语句必须写在方法中,执行throw 语句的地方就是一个异常抛出点,它和由JRE自动形成的异常抛出点没有任何差别。

public void save(User user) {
    if (user == null)
        throw new IllegalArgumentException("User对象为空");
    //......
}

常量

常量是指在程序的整个运行过程中值保持不变的量,是不能改变的数据。通常也被称为final变量,因为在程序中只能被赋值一次

在这里插入图片描述

整形常量:

  1. 整形常量

整形常量是整数数型的数据,有二进制、八进制、十进制、十六进制4种表示形式,具体说明

(1)二进制:由数字0和1组成的数字序列。在JDK7.0中允许使用字面值来表示二进制数,前面要以0b或0B开头,目的是为了和十进制进行区分,如0b01101100、0B10110101。
(2)八进制:以0开头并且其后由0~7范围内(包括0和7)的整数组成的数字序列,如0342。
(3)十进制:由数字0~9范围内(包括0和9)的整数组成的数字序列。如198。
(4)十六进制:以0x或者0X开头并且其后由09、AF(包括0和9、A和F)组成的数字序列,如0x25AF。
需要注意的是,在程序中为了标明不同的进制,数据都有特定的标识,八进制必须以0开头,如0711,0123;十六进制必须以0x或0X开头,如0xaf3、0Xff;整数以十进制表示时,第一位不能是0,0本身除外。例如十进制的127,用二进制表示为011111八进制表示为017,用十六进制表示为0x7F或者0X7F
在这里插入图片描述
浮点数常量:

浮点数常量就是在数学中用到的小数,分为float单精度浮点数和double双精度浮点数两种类型

*注意:*单精度浮点数后面要以F或f结尾,而双精度浮点数则以D或d结尾(不用也行,因为java虚拟机会将 浮点数默认为double双精度浮点数)
也可以用指数形式来表示

2e3f    3.6d   3.84d   5.022e+23f

字符常量:

字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号’'引起来;它可以是英文字母、数字、标点符号以及转移序列来表示

'a'  7 ',' '\r'(转义符)

(字符常量中,转义符(\)的作用是用来转义紧随其后的一个字符)
\t 相当于tab键
\b 退格(Backspace)
\f 控制台输出相当于如图
\n 换行
\r回车
’ 表示省略紧跟后面的那个‘
" 表示省略紧跟后面的那个“
\表示需要用到字面意思
在这里插入图片描述
(char代表一个字符 '也只能是一个支付)
在这里插入图片描述

字符串常量:

字符串常量用于表示一串连续的字符,一个字符串常量要用一堆英文半角格式的双引号"".

"pigpigone"  "123pigpig" "haha"

布尔常量:

只有true 和 false

null常量:

null常量只有一个值,表示对象的引用为空,Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量

  1. null本身不是对象,也不是Objcet的实例
  2. Java默认给 引用类型变量 赋值为null(初始值),基本数据类型:整形byte,short,int,long为0 浮点数float double 为0.0 ,boolean初始值为false,char为/u0000(空格)
    在这里插入图片描述
    (在方法块定义变量时必须赋值,字段被static修饰就是类变量。在类加载的准备阶段,该变量会被赋予默认值,在类加载的初始化阶段,会被赋予程序定义的初始值)
  3. 容器类型与null,
    (1)List:允许重复元素且线性储存,可以加入任意多个null
    (2)Set:不允许重复元素,且无序,最多可以加入一个null
    (3)Map:Map的key最多可以加入一个null,value字段没有限制
    (4)数组:基本类型数组,定义后,如果不给定初始值,则java运行时会自动给定值。引用类型数组,不给定初始值,则所有的元素值为null
  4. null的其他作用
    (1) 判断一个引用类型数据是否null。 用==来判断
    (2) 释放内存,让一个非null的引用类型变量指向null。这样这个对象就不再被任何对象应用了。等待JVM垃圾回收机制去回收等等
    在这里插入图片描述

常量引用语法

final 数据类型 常量名称(=值

当定义的常量如果属于“成员变量”,则必须在定义时就赋给初值,否则将会在编译时出先错误
在这里插入图片描述
(第3行报错)

常量在程序运行过程中主要作用

  1. 代表常数,便于程序的修改,比如:圆周率的值;
  2. 增强程序的可读性,比如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其数值分别是1、2、3和4)

interface(接口)中定义常量

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法

Interface定义常量方法:常量接口即接口中不包含任何方法,只包含静态的final域,每个域都导出一个常量
例如:
在这里插入图片描述
class类和interface接口中定义常量的区别

1.代码简洁
2. interface 中定义常量方法生成的 class 文件比第一种方法的更小
为什么小呢?
我们都知道 interface 没有继承 Object,Object 是所有类的基类,所以 interface 不是类。
Java 在编译之后会在字节码文件中生成 方法,称之为实例构造器,该实例构造器会将语句块,变量初始化,调用父类的构造器等操作收敛到 方法中。
并且接口中也没有 ,因为当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化,必然会调用 ,况且接口也不能初始化。这样看来接口的确不是类哈

Enum枚举定义常量

enum ConstantEnum {    
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY    
}//每个枚举变量都是枚举类ColorEnum的实例,相当于RED=new ColorEnum(1),按序号来。
    //每个成员变量都是final static修饰

在这里插入图片描述

上述的常量定义常量的方式称为int枚举模式,这样的定义方式并没有什么错,但它存在许多不足,如在类型安全和使用方便性上并没有多少好处,如果存在定义int值相同的变量,混淆的几率还是很大的,编译器也不会提出任何警告,因此这种方式在枚举出现后并不提倡,现在我们利用枚举类型来重新定义上述的常量,同时也感受一把枚举定义的方式,如下定义各种猪的颜色
在这里插入图片描述
相当简洁,在定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型。枚举类型Day中分别定义了猪的各种颜色,这里要注意,值一般是大写的字母,多个值之间以逗号分隔。同时我们应该知道的是枚举类型可以像类(class)类型一样,定义为一个单独的文件,当然也可以定义在其他类内部,更重要的是枚举常量在类型安全性和便捷性都很有保证,如果出现类型问题编译器也会提示我们改进,但务必记住枚举表示的类型其取值是必须有限的,也就是说每个值都是可以枚举出来的

原理:使用enum(枚举)关键字时会创建一个枚举类型并编译,同时还会生成一个相关的抽象类,这个类继承API的java.lang.enum类会为我们实例化对象(REDPIG,BLUEPIG…)常量。简单来说用enum关键字会创建一个枚举类型和一个相关的类,用javac编译后,生成两个文件PIG.class和enum.class.PIG.class经过反编译后会生产PIG类,这个类继承enum 同时是抽象的以及会产生两个静态方法,分别是values()和 valueOf();
values()方法的作用就是获取枚举类中的所有变量,并作为数组返回
valueOf(String name)方法与Enum类中的valueOf方法的作用类似根据名称获取枚举变量,只不过编译器生成的valueOf方法更简洁些只需传递一个参数(可以是枚举里面的常量)
在这里插入图片描述

枚举类型的方法
在这里插入图片描述
在这里插入图片描述

感谢观看!!!!! 祝元旦快饿!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值