香雨站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 105|回复: 1

java基础

[复制链接]

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2022-9-20 21:27:17 | 显示全部楼层 |阅读模式
java基础语法

1.1基本语法


  • 大小写敏感
  • 类名--首字母应大写,若由若干单词组成,则每个单词首字母大写
  • 方法名--应以小写字母开头,若由若干单词组成,则后面的每个单词首字母大写
  • 源文件名--必须与类名相同
  • 主方法入口--由public static void main(String[] args)方法开始
1.2 标识符

类名、变量名以及方法名都被称为标识符

  • 标识符应以字符(A-Z或a-z),$,或_开始
  • 关键字不能作标识符
  • 大小写敏感
1.3修饰符

使用修饰符修饰类中方法和属性

  • 访问控制修饰符:default, public, protected, private
  • 非访问控制修饰符:final, abstract, static, synchronized
1.4变量


  • 局部变量
  • 类变量(静态变量)
  • 成员变量(非静态变量)
1.5数组

存储在堆上的变量,可以保存多个类型
1.6枚举

限制变量只能是预先设定好的值
1.7 继承

一个类可由其他类派生,利用继承可重用已存在类的方法和属性,被继承的类为超类,派生类为子类
1.8Java对象和类


  • 对象是类的实例;
  • 创建对象的步骤:

    • 声明(包括对象名称和类型)
    • 实例化(使用关键字new来创建)
    • 初始化(调用构造方法初始化对象)

  • 类是一类对象的行为和状态
1.9java构造方法

名称必须与类同名,在创建一个对象时至少调用一个构造方法
java对象和类

2.1对象

对象是类的一个实例,有状态有行为
2.2类


  • 局部变量:在方法、构造方法或语句块中定义的变量称为局部变量。方法结束后自动销毁
  • 成员变量:定义在类中,方法体之外的变量。在创建对象时实例化,可被类中方法、构造方法和特定类的语句块访问
  • 类变量:声明在类中,必须声明为static类型
2.3构造方法

创建一个对象时至少调用一个构造方法,构造方法名必须与类同名
2.4创建对象

对象时根据类创建的,java中使用new来创建新的对象,以下三步

  • 声明:声明一个对象,包括对象名和类型
  • 实例化:使用关键字new来创建一个对象
  • 初始化:使用new创建对象时,调用构造方法初始化对象
java基础数据类型

基本数据类型直接存在堆中,引用数据类型存的是常量池地址
基本数据类型

数值型:

  • 整数类型 -- byte, short, int, long
  • 浮点类型 -- float, double
字符类型:char, 存放单个字符
布尔型:存放true, false
引用数据类型

引用类型指向一个对象,指向对象的变量是引用变量。对象、数组都是引用数据类型。默认值为null

  • 类 class
  • 接口 interface
  • 数组 [ ]
数组

定义:可以存放多个同一类型的数据,数组就是一组数据。
数组的使用

  • 动态初始化 数组类型[] 数组名=new 数据类型[大小]

    • int a[]=new int[5];



  • 动态初始化

    • 先声明数组

      • 数组名=new 数据类型[大小];

        • int a[]; 或 int[] a;
        • a=new int[10];





  • 静态初始化

    • 数据类型 数组名[] ={元素值, 元素值...}
    • int a[] = {2, 5, 7, 9, 11}


数组使用注意事项和细节


  • 数组是多个相同类型数据的组合
  • 数组中元素可以是任何数据类型,包括基本类型和引用类型,但不能混用
  • 数据创建后,若没有赋值,有默认值
  • 使用数组步骤:1.声明数组并开辟空间 2.给数组各个元素赋值 3.使用数组
  • 数组下标是从0开始的
  • 数组下标必须在指定范围内使用后
  • 数组属于引用类型,数组型数据是对象
数组赋值机制


  • 基本数据类型赋值,只是具体的数据,相互不影响  -- 值拷贝

    • int n1=10; n2=n1; n2=80;   ==>  n1=10, n2=80



  • 数组在默认情况下是引用传递 ,赋的值是地址  -- 引用赋值

    • int[] arr1={1, 2, 3}; int[] arr2=arr1; arr2[0]=10;  ==> arr1={10, 2, 3}


数组扩容


  • 定义一个新数组,长度为原数组长度+1
  • 将原数组值一一拷贝,再将新增值赋到新数组最后一位
  • 让原数组指向新数组
二维数组

定义:原来一维数组的每个元素是一维数组,就构成了二维数组 int[][]

  • 二维数组的元素个数:arr.length
  • 二维数组每个元素是一维数组,所以如果需要得到每个一维数组的值,还需要再次遍历
  • 如果要访问第(i+1)个一维数组的第(j+1)个值:arr[j]
二维数组的使用:

  • 动态初始化 类型[][] 数组名=new 类型[大小][大小]
  • 先声明再定义  1.类型 数组名[][]   2.数组名=new 类型[大小][大小]  3.赋值
  • 动态初始化 -- 列数不确定

    • 一个有三个一维数组,每个一维数组元素个数不一样

      • int[][] arr=new int[3][]; //列数不确定




  • 静态初始化 定义 类型 数组名[][] = {{值1, 值2..},{值1, 值2..},{值1, 值2..}}
使用细节和注意事项:

  • 声明方式 int[][] y 或 int[] y[] 或int y[][]
  • 二维数组实际上是由多个一维数组组成的,它的各个一维数组长度可以相同也可以不相同
java常量

常量在程序运行时不能改变, Java 中使用 final 关键字来修饰常量。
final double PI = 3.1415927;数据类型转换

自动类型转换

要求:转换前数据类型的位数低于转换后的数据类型
char c1='a';
int i1=c1;//char自动转换为int强制类型转换

要求:转换的数据类型必须是兼容的
int i1=123;
byte b=(byte)i1;隐含强制类型转换

整数的默认类型是int;小数的默认是double,若需要float,必须在数字后面加F/f
java变量类型

类变量

独立于方法之外的变量,用 static 修饰;类变量也称为静态变量;静态变量是指声明为 public/private,final 和 static 类型的变量,初始化后不可改变;储存在静态存储区;可以通过:ClassName.VariableName的方式访问。
实例变量

独立于方法之外的变量,但没有 static 修饰;
局部变量

类的方法中的变量;声明在方法、构造方法或者语句块中;是在栈上分配的;只在声明它的方法、构造方法或者语句块中可见;
java switch case


  • switch 语句中的变量类型可以是: byte、short、int 或者 char
  • 可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号
  • case 语句中的值的数据类型必须与变量的数据类型相同
switch case执行时会先进行匹配,匹配成功返回当前case值,再根据是否有break判断是否继续输出或跳出判断

  • 若case中没有break,JVM不会顺序输出每一个case返回值,而是继续匹配,匹配不成功则返回默认case
  • 若case中没有break,匹配成功后,从当前case开始,后续所有case值都会输出
  • 若case 中没有break,则从当前case开始后续所有case都会输出
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。continue 适用于任何循环控制结构中,让程序立刻跳转到下一次循环的迭代。

  • break:跳出最里层的循环,并且继续执行该循环下面的语句
  • continue:跳转到下一次循环的迭代
格式化字符串/数字

格式化数字:使用 printf() 和 format() 方法

  • 格式化字符串:使用静态方法 format() 返回一个String 对象,创建可复用的格式化字符串
Java StringBuffer和StringBuilder类

当对字符串进行修改时需要使用StringBuffer和StringBuilder,字符串对象不能被修改,但该类创建的对象能被多次修改。

  • StringBuffer:每次会对SBuffer对象本身进行操作,要对字符串修改时推荐使用。
  • StringBuilder:不是线程安全的(不能同步访问),有速度优势,多数情况下建议使用
Java正则表达式

定义字符串模式;用来搜索、编辑或处理文本

  • Pattern 类:一个正则表达式的便已表示,没有公共构造方法。需要调佣公共静态编译方法,返回一个pattern对象
  • Matcher 类:对输入字符串进行解释和匹配操作的引擎,没有公共构造方法。需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
  • PatternSyntaxException:非强制异常类,表示一个正则表达式模式中的语法错误
捕获组

把多个字符当一个单独单元进行处理的方法,通过对括号内的字符分组来创建,通过从左至右计算其开括号来编号。可以通过matcher对象的groupCount查看表达式有多少个分组
group(0)代表整个表达式
正则表达式语法

'\\' 表示插入一个正则表达式的反斜线,java中需要两个反斜杠才能被解析为转义作用。具体语法:https://www.runoob.com/java/java-regular-expressions.html
java方法

java方法是语句的集合,一起执行一个功能;是解决一类问题的步骤的有序组合;包含于类或对象中;在程序中被创建,在其他地方被引用
定义

修饰符 返回值类型 方法名(参数类型 参数名){
方法体;
return 返回值;
}


静态方法

    当一个方法是static时,就是一个静态方法,静态方法可以直接通过类名调用
方法重载(overload)

允许同一个类中,多个方法名相同,但要求形参列表不一致
某方法适用于int型数据,当我们需要用于其他数据类型时,创建另一个有相同名字但参数不同的方法。如果传递的是int型参数,则int型参数的方法体会被调用;传递的是double型参数,则double型参数的方法体会被调用,这叫做方法重载
一个类的两个方法拥有相同的名字,但是有不同的参数列表
构造方法

构造方法用于初始化对象,和它所在类名相同,但没有返回值。通常使用构造方法对类的实例变量赋初值,或执行其它必要步骤创建一个完整的对象。
当创建一个有参构造器,原先默认的无参构造器会被覆盖
finalize()方法

在对象被垃圾收集器析构(回收)之前调用,用于清除回收对象。在 finalize() 方法里,你必须指定在对象销毁时候要执行的操作。
语法:
protected void finalize() {   
// 在这里终结代码
}关键字 protected 是一个限定符,它确保 finalize() 方法不会被该类以外的代码调用
java流、文件和IO

一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
读取控制台输入

控制台输入由http://System.in完成,为了获得一个绑定到控制台的字符流,可以把http://System.in包装在一个BufferReader对象中来创建一个字符流。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))BufferedReader 对象创建后,就可以使用read()/readLine()从控制台读取一个字符/字符串,
读取多字符输入:int read() throws IOException,每次调用read(),它从输入流读取一个字符并把该字符作为整数值返回,当流结束的时候返回 -1。该方法抛出 IOException。
读取字符串:String readLine() throw IOException
控制台输出

控制台的输出由 print( ) 和 println() 完成,PrintStream 继承了 OutputStream类,并且实现了方法 write()。这样,write() 也可以用来往控制台写操作。write() 后要紧跟换行符输出语句。
读写文件



FileInputStream

该流用于从文件读取数据
InputStream f = new FileInputStream("C:/java`/hello");
也可以使用一个文件对象创建一个输入流对象来读取文件
File f = new File("C:/java/hello");
InputStream in = new FileInputStream(f);
FileOutputStream

该流用于创建一个文件并向文件中写数据
OutputStream f = new FileOutputStream();//使用字符串类型的文件名来创建一个输出流对象:
也可以使用一个文件对象来创建一个输出流来写文件。
File f = new File("C:/java/hello");
OutputStream fOut = new FileOutputStream(f);
JavaScanner类

next()和nextLine()的区别:
next():

  • 读取到有效字符后才可结束输入
  • 对输入有效字符之前遇到的空白,next()会自动去掉
  • 只有输入有效字符后才将其后面输入的空白作为分隔符或结束符
  • 不能得到带有空格的字符串
nextLine():

  • 以enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符
  • 可以获得空白
异常处理


  • 检查性异常--用户错误或问题引起的异常,例如要打开一个不存在的文件,在编译时不能被简单地忽略
  • 运行时异常--运行时异常可以在编译时被忽略
  • 错误--不是异常
Exception类层次

Exception类是Throwable类的子类,Throwable的另一个子类是Error


捕获异常

使用try和catch可以捕获异常,try/catch代码块中的代码称为保护代码。
Catch 语句包含要捕获异常类型的声明,当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查
throws/throw 关键字

如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部,也可以使用 throw 关键字抛出一个异常
一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。
finally关键字

用来创建在 try 代码块后面执行的代码块,无论是否发生异常,finally 代码块中的代码总会被执行,finally代码块可以运行清理类型等收尾善后性质的语句
try, catch, finally 块之间不能添加任何代码
try-with-resources

打开资源并在语句执行完毕后确保每个资源被自动关闭
try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
            while ((line = br.readLine()) != null) {
                System.out.println("Line =>"+line);
            }
        } catch (IOException e) {
            System.out.println("IOException in try block =>" + e.getMessage());
   }
}try-with-resources语句中可以声明多个资源,用";"分隔各个资源,多个资源声明时,try-with-resources以相反的顺序关闭资源
try (Scanner scanner = new Scanner(new File("testRead.txt"));
            PrintWriter writer = new PrintWriter(new File("testWrite.txt")))声明自定义异常


  • 所有异常必须是Throwable的子类
  • 若希望写一个检查性异常类,则需要继承Exception类
  • 若希望写一个运行时异常类,则需要继承RuntimeException类
通用异常


  • JVM异常:由 JVM 抛出的异常或错误。
  • 程序级异常:由程序或者API程序抛出的异常。
回复

使用道具 举报

3

主题

6

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2025-2-25 03:53:38 | 显示全部楼层
支持楼主,用户楼主,楼主英明呀!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|香雨站

GMT+8, 2025-3-15 04:54 , Processed in 0.615441 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表