Java 初级语法学习笔记(基础)

目录

基本语法/规范

标识符

变量

Java 内置数据类型

Java 引用数据类型

Arrays 类

1.自动类型转换

2.强制类型转换(编译器)

Java 常量

Java转义字符(ASCII码值)

Java 程序执行逻辑

A. 循环结构(for、while、do...while)

a. For-Each 循环(增强for循环/加强型循环)

B. 条件结构(if...else)

C. 管道结构(switch case)

Java Number&Math 类

Number&Math 类的常用方法:(以后补充)

Java Character&String 类

Java StringBuffer&StringBuilder 类

append、insert、SteringBuilder、StringBuffer的区分:

1.append 始终将指定字符添加到缓冲区的末端,而 insert 方法则会更改缓冲区然后再插入字符到指定的点。

Java Date 类

SimpleDateFormat 类(处理日期时间的类)

Java sleep():使当前线程进入停滞状态

Calendar 类


在Java世界里,可以说一切皆对象!

  1. 对象:对象是类的某个实例,有状态和行为、属性。
  2. 类:类是对象的模板,它来描述某一类对象的特征。
  3. 方法(函数):方法就是行为,一个类可以有许多方法。
  4. 实例变量:每个对象都有独立的实例变量,对象的状态最终由这些实例变量的值决定。

基本语法/规范

  • 大小写敏感
  • 类名应以大写字母开头
  • 方法名应以小写字母开头
  • 源文件(.java文件)必须和类名一致
  • 主方法入口:public static void main (String[] args)

标识符

  • 大小写敏感
  • 所有的标识符都由字母、数字、美元符($)、下划线组成,但数字不能作为其开头
  • 约定俗成的关键字不能用作标识符

变量

  • 局部变量
  • 类变量(静态变量)
  • 成员变量/属性(非静态变量)

Java 内置数据类型

  1. 数值型
    1. 整型:byte < short < int < long
    2. 浮点型:float < double
  2. 文本型
    1. 字符型:char
  3. 逻辑型
    1. 布尔型:boolean
  4. 枚举型:enum(变量)

注:枚举可以单独声明或者声明在类里面。而方法、变量、构造函数也可以使用枚举修饰符。

枚举的常用方法
格式效能
values()将枚举成员以数组形式返回
valueOf()将字符串转化成枚举类型
compareTo()比较两个枚举对象的定义顺序
ordinal()返回此枚举成员的索引

Java 引用数据类型

  1. 字符串类型:String
  2. 数组类型:[]
  3. 对象类型:Object

数组是重要的数据结构,Java 语言中提供的数组是用来存储固定大小的同类型元素。而字符串类型 String 在底层就是用 char[] 数组实现的。

Arrays 类

java.util.Arrays 类是专门操作数组的类,它提供的所有方法都是 static 静态的。

Arrays 类的常用方法
格式效能
public static int binarySearch(Object[] a, Object key)

对指定数组a进行二分查找指定元素key

public static boolean equals(Object[] a, Object[] b)比较数组a、b元素数量是否相等
public static void fill(Object[] a, Object o)将指定o元素分配给数组a
public static void sort(Object[] a)对指定数组a按自然顺序进行升序排列(比如0~9)

1.自动类型转换

前提:必须满足转换前的数据类型的位数要低于转换后的数据类型。(衣服只能越做越大,不能越做越小)

由低到高:

byte、short、char ——> int ——> long ——> float ——> double

  1. 不能对逻辑型(boolean)进行类型转换
  2. 容量大的转容量小的类型时必须使用强制类型转换
  3. 须知,转换过程中可能会损失精度

2.强制类型转换(编译器)

前提:转换的数据类型必须是兼容的。(即具有一定的转换逻辑)以下为格式display

int i = 10;
byte b = (byte)i;

隐含的强制类型转换:

byte num1 = 10;
//整数的默认类型是int,上面就发生了int转byte的隐性强制类型转换
float num2 = 1.3f;
/*小数的默认类型是double,在给float类型赋小数值时就必须在数字后面加F或f;
即先让1.3转为float类型再赋值给num2变量*/ 

错误的强制类型转换:

byte num;
num = num + 1;
/*将会发生编译错误,因为发生了两次运算:
第一次num + 1是在计算运行时被提升到了int类型
第二次把int类型结果赋值给num
而这时是不会发生强制类型转换的*/ 

Java 常量

特点:常量在程序运行时是不能被修改的。(上了过山车就不能随便改座位了)

final double PI = 3.14;

//需要使用 final 关键字来表示 PI 是个常量

Java转义字符(ASCII码值)

转义字符效果ASCII码值(十进制)
\a响铃007
\b退格008
\f换页012
\n换行010
\r回车013
\t水平制表(按Tab)009
\v垂直制表011
\\

代表一个反斜线字符“\”

092
\'代表一个单引号(撇号)字符039
\"代表一个双引号字符034
\0空字符(null)000
\ddd1到3位的八进制所代表的任意字符三位八进制
\xhh1到2位的十六进制所代表的任意字符二位十六进制

这里就不涉及讲Java修饰符和Java运算符了。

Java 程序执行逻辑

A. 循环结构(for、while、do...while)

1.
for(初始化;逻辑表达式;更新) {
    //循环体
}
2.
while(逻辑表达式) {
    //循环体
}
3.
do {
    //循环体
}while(逻辑表达式);

a. For-Each 循环(增强for循环/加强型循环)

for (type element:array) {
//循环体
}

B. 条件结构(if...else)

1.
if(逻辑表达式) {
//true执行体
}
2.
if(逻辑表达式) {
//true执行体
}else {
//false执行体
}

if...else 语句可以连续嵌套使用

C. 管道结构(switch case)

switch(表达式) {
    case value1:
    //执行语句
    break;//可选项
    case value2:
    ...
    //你可以写任意条case语句
    default://可选项
    //默认执行语句
}

switch case 结构的表达式里只能填写整数型和枚举型。

Java Number&Math 类

        当我们需要更高级的对象而不是内置数据类型时,包装类应运而生!(包装类都是抽象类 Number 的子类)Number 类属于 java.lang 包。

基本数据类型和包装类的对照
内置数据类型包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

(可以看出除了 char 和 int 的包装类是特别的,其余的都只不过是大写了开头字母罢了)

由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类;相应的,编译器也可以把一个数据对象拆箱为内置类型。

Number&Math 类的常用方法:(以后补充)

        Java 的 Math 类的方法都被定义为 static 形式,这方便了我们的调用。

Number&Math 类的方法
方法格式效能
xxxValue()将 Number 对象转换为xxx数据类型的值并返回
compareTo()将number对象与参数比较
equals()判断number对象是否与参数相等
valueOf()返回一个Number对象指定的内置数据类型
toString()以字符串形式返回值
parseInt()将字符串解析为int类型
abs()返回参数的绝对值
ceil()返回>=给定参数的的最小整数,类型为双精度浮点型
floor()返回<=给定参数的最大整数
rint()返回与参数最接近的整数。返回类型为double
round()它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整
min()返回两个参数中的最小值
max()返回两个参数中的最大值
exp()返回自然数底数e的参数次方
log()返回参数的自然数底数e的对数值
pow()返回第一个参数的第二个参数次方
sqrt()求参数的算术平方根(即开平方)
sin()求指定double类型参数的正弦值
cos()求指定double类型参数的余弦值
tan()求指定double类型参数的正切值
asin()求指定double类型参数的反正弦值
acos()求指定double类型参数的反余弦值
atan()求指定double类型参数的反正切值
atan2()将笛卡尔坐标转换为极坐标,并返回极坐标的角度值
toDegrees()将参数转化为角度
toRadians()将角度转换为弧度
random()返回一个随机数,即是一个 [0.0, 1.0) 的伪随机 double 值

Java Character&String 类

       

Character 的方法
格式效能
isLetter()是否是一个字母
isDigit()是否是一个数字字符
isWhitespace()是否是一个空白字符
isUpperCase()是否是大写字母
isLowerCase()是否是小写字母
toUpperCase()指定字母的大写形式
toLowerCase()指定字母的小写形式
toString()返回字符的字符串形式,即字符串的长度仅为1

直接创建字符串 String,直接套用双引号 ""

String str = "我是直接创建的字符串";

构造函数创建字符串 String,使用关键字 new

String str2 = new String("我是用构造函数创建的字符串");

以上 str 和 str2 的区别是:str存储在公共池里,而str2存储在堆上。(前者是大家都可以引用它,后者是开辟了一个独有的空间)

String 类的常用方法
格式效能
char charAt(int index)返回指定索引处的 char 值
int compareTo(Object o)把这个字符串和另一个对象比较
int compareTo(String anotherString)按字典顺序比较两个字符串
int compareTolgnoreCase(String str)按字典顺序比较两个字符串(不考虑大小写)
String concat(String str)将指定字符串连接到此字符串的结尾
boolean contentEquals(StringBuffer sb)当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真
static String copyValueOf(char[] data)返回指定数组中表示该字符序列的 String
static String copyValueOf(char[], int offset, int count)返回指定数组中表示该字符序列的 String
boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束
boolean equals(Object anObject)将此字符串与指定的对象比较
boolean equalslgnoreCase(String anotherString)将此 String 与另一个 String 比较(不考虑大小写)
byte[] getByte()使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中并返回
byte[] getByte(String charsetName)使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中并返回
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将字符从此字符串复制到目标字符数组
int hashCode()返回此字符串的哈希码
int indexOf(int ch, int fromIndex)返回在此字符串中第一次出现指定字符处的索引(从指定的索引开始搜索)
int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引
int indexOf(String str, int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引(从指定的索引开始)
String intern()返回字符串对象的规范化表示形式
int lastIndexOf(int ch)返回指定字符在此字符串中最后一次出现处的索引
int lastIndexOf(int ch, int fromIndex)返回指定字符在此字符串中最后一次出现处的索引(从指定的索引处开始进行反向搜索)
int lastIndexOf(String str)返回指定子字符串在此字符串中最右边出现处的索引
int lastIndexOf(String str, int fromIndex)返回指定子字符串在此字符串中最后一次出现处的索引(从指定的索引开始反向搜索)
int length()返回此字符串的长度
boolean matches(String regex)告知此字符串是否匹配给定的正则表达式
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)测试两个字符串区域是否相等
boolean regionMatches(int toffset, String other, int ooffset, int len)测试两个字符串区域是否相等
String replace(char oldChar, char newChar)返回一个新的字符串(它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的)
String replaceAll(String regex, String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
String replaceFirst(String regex, String replacement)使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串
String[] split(String regex)根据给定正则表达式的匹配拆分此字符串
String[] split(String regex, int limit)根据匹配给定的正则表达式拆分此字符串
boolean startsWith(String prefix)测试此字符串是否以指定的前缀开始
boolean startsWith(String prefix, int toffset)测试此字符串从指定索引开始的子字符串是否以指定前缀开始
charSequence subSequence(int beginIndex, int endIndex) 返回一个新的字符序列(它是此序列的一个子序列)
String substring(int beginIndex)返回一个新的字符串(它是此字符串的一个子字符串)
String substring(int beginIndex, int endIndex)返回一个新字符串(它是此字符串的一个子字符串)
char[] toCharArray()将此字符串转换为一个新的字符数组
String toLowerCase()使用默认语言环境的规则将此 String 中的所有字符都转换为小写
String toString()返回此对象本身(注意!它已经是一个字符串)
String toUpperCase()使用默认语言环境的规则将此 String 中的所有字符都转换为大写
String toUpperCase(Locale locale)使用给定 Locale 的规则将此 String 中的所有字符都转换为大写
String trim()返回字符串的副本(忽略了前导空白和尾部空白)
static String valueOf(primitive data type x)返回给定 data type 类型 x 参数的字符串表示形式
contains(CharSequence chars)判断是否包含指定的字符系列
inEmpty()判断字符串是否为空

想知道更多,就看Java API 文档吧!

Java StringBuffer&StringBuilder 类

当有对字符串 String 进行多次修改的需求时,就需要使用 StringBuffer&StringBuilder 类。

因为 String 是不可变序列,所以每当修改 String 类型时都等同于新建了个 String 对象,再让指针指向它。由此可见,频繁修改的字符串最好不用 String 类型,因为会对系统性能造成影响。(特别是当内存中的无引用对象多了以后,JVM 的 垃圾回收器 GC 就会开始工作,这极大的影响了速度)

和 String 类不同的是, StringBuffer&StringBuilder 类的对象能够被多次修改,而不必再创建新的对象。

String StringBuffer StringBuilder 三者的比较
字符串类:StringStringBufferStringBuilder
字符串修改功能-
线程安全×
速度优势最慢老二最快
线程操作不可变序列(只读安全)多线程单线程
相同点都经过 final 修饰,不允许被继承。(底层使用 char[] 存储)

JVM 的智能理解:

String s1 = "I love" + "China";

一个字符串 String 对象内的拼接表示:上下两行代码的意义是相同的:(这时跟StringBuilder的执行效率一样)

String s1 = "I love China";

但是如果是多个字符串呢?那么还是得新建对象存储!如:

String s1 = "I love";
String s2 = "China"
String result = s1 + s2;
主要方法
格式效能
public StringBuffer append(String s)将指定的字符串追加到此字符序列
public StringBuffer reverse将此字符序列用其反转形式取代
public delete(int start, int end)移除此序列的子字符串中的字符
public insert(int offset, int i)将 int 参数的字符串表示形式插入此序列中
insert(int offset, String str)将 str 参数的字符串插入此序列中
replace(int start, int end, String str)使用给定 String 中的字符替换此序列的子字符串中的字符

append、insert、SteringBuilder、StringBuffer的区分:

  1. append 始终将指定字符添加到缓冲区的末端,而 insert 方法则会更改缓冲区然后再插入字符到指定的点。
  2. StringBuilder 类被设计为 StringBuffer 的替换品:在大部分情况下速度上 StringBuilder > StringBuffer,而两者的方法又基本相同。(但是在多线程情况下就会考虑采用 StringBuffer)

StringBuilder 是单机版,StringBuffer 是联机版。

补充方法
格式效能
int capacity()返回当前容量
char chatAt(int index)返回此序列中指定索引处的 char 值
void ensureCapacity(int minmumCapacity)确保容量至少等于指定的最小值
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将字符从此序列复制到目标字符数组 dst
int indexOf(String str)返回第一次出现的指定子字符串在该字符串中的索引
int indexOf(String str, int fromIndex)返回第一次出现的指定子字符串在该字符串中的索引(从指定的索引处开始)
int lastIndexOf(String str)返回最右边出现的指定子字符串在此字符串中的索引
int lastIndexOf(String str, int fromIndex)返回 String 对象中子字符串最后出现的位置(从指定的索引处开始)
int length()返回长度(字符数)
void setCharAt(int index, char ch)将给定索引处的字符设置为 ch
void setLength(int newLength)设置字符序列的长度
CharSequence subSequence(int start, int end)返回一个新的字符序列,该字符序列是此序列的子序列(根据指定的开始和结束)
String substring(int start)返回一个新的 String,它包含此字符序列当前所包含的字符子序列(根据指定的开始)
String substring(int start, int end)返回一个新的 String,它包含此序列当前所包含的字符子序列(根据指定的开始和结束)
String toString()返回此序列中数据的字符串表示形式

注:CharSequence与String都能用于定义字符串,但CharSequence的值是可读可写序列,而String的值是只读不可变序列。(简单来说字符串常量是包含在双引号""之间的字符序列)

Java Date 类

java.util 包提供了Date类来封装日期/时间,我们先看看它的两个构造函数:

1.
Date()
2.
Date(long millisec)

Date 类功能方法一览
格式效能
boolean after(Date date)若当调用此方法的Date对象在指定日期之后返回true,否则返回false
boolean before(Date date)若当调用此方法的Date对象在指定日期之前返回true,否则返回false
Object clone()返回此对象的副本
int compareTo(Date date)比较当调用此方法的Date对象和指定日期(两者相等时候返回0,调用对象在指定日期之前则返回负数,调用对象在指定日期之后则返回正数)晚于负数,早于正数
int compareTo(Object obj)若obj是Date类型则操作等同于compareTo(Date date),否则它抛出ClassCastException
boolean equals(Date date)当调用此方法的Date对象和指定日期相等时候返回true,否则返回false(比较)
long getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的Date对象表示的毫秒数
int hashCode()返回此对象的哈希码值
void setTime(long time)使用自 1970 年 1 月 1 日 00:00:00 GMT 以后的 time 毫秒数来设置时间和日期
String toString()把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy(其中,dow 是一周中的某一天:Sun,Mon,Tue,Wed,Thu,Fri,Sat)zzz是时间标准

SimpleDateFormat 类(处理日期时间的类)

引入一下词条:SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。

SimpleDateFormat 格式化对象的构造方法
格式效能
SimpleDateFormat()创建默认格式化方式的对象
public SimpleDateFormat(String pattern)创建指定pattern格式的对象

SimpleDateFormat 格式化对象的调用方法
格式效能方向
public String format(Date date)格式化时间对象date时间对象封装成字符串对象返回:日期 ——> 文本
public Date parse(String source)解析给定的字符串文本,返回日期对象字符串对象解析成时间对象返回:文本 ——> 日期

日期时间的格式化编码表(pattern格式)

格式描述
yyyy年份
MM月份
dd
hh1~12小时制度
HH0~23小时制度
mm分钟
ss
S毫秒
E星期
D一年以来的第几天
F一月以来的第几个星期(即这月过的天数再除以7)
w一年以来的第几个星期
W一月以来的第几个星期(根据实际情况来,比F更严谨)
a上下午标识(am、pm)
k1~24小时制度
K0~11小时制度
z代表时区

Java sleep():使当前线程进入停滞状态

java.util

Thread.sleep(时间参数(单位:毫秒));

Calendar 类

前面的格式化及创建操作我们已经学习了,但是我们如何设置、获取和运算这些日期时间呢?Calendar 类它来了!

Calendar 对象的构造方法
格式效能
Calendar.getInstance()默认返回是当前系统日期
Calendar c1 = Calendar.getInstance();
c1.set(2023, 10-1, 6);
//c1 日期是 2023 年 9 月 6 日
Calendar 类对象字段类型表
Calendar 常量描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期,跟DATE的意义一样
Calendar.HOUR12小时制度的小时
Calendar.HOUR_OR_DAY24小时制度的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OR_WEEK星期几

注意:Calendar 类的月份是从 0 开始的,但其日期和年份是从 1 开始的

还有比较专业的日期时间类:GregorianCalendar 类,我这里就先不赘述了。

接下来推荐一篇文章!

Java三大特性学习笔记(基础)_忌冬的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值