charat越界返回什么_Java基本语法方法修饰符返回类型参数列表异常列表

方法[method name]

定义

方法[method]是类的成员之一,(因为在java中,方法不能单独定义,它必须在类之中)。

修饰符 返回类型 方法名()[throws 异常类型]{
 //方法体
}

方法名字:只要是一个合法的名字就可以,尽可能有意义。如:getName,nextInt...

调用

当被调用的方法使用static修饰符修饰时:

  • 通过类名来调用,也就是:ClassName.methodName();如:
double d = Math.sqrt(4.5);
String istr = Integer.toBinaryString(8);

当被调用的方法没有使用static修饰符修饰时:

  • 通过对象来调用,也就是:obj.methodName();如:
Scanner sc = new Scanner(System.in);
//此处的sc就是对象[变量]
int i = sc.nextInt();

:在Java中,方法之间是没有顺序的。

/* this 当前对象 same class context 上下文 一个静态方法不能直接调用非静态方法。所以要先创建对象。*/

重载

在一个类中,具有相同方法名称但不同参数的方法就构成了方法的重载。什么叫方法的重载?

  • 参数个数不同
  • 参数类型不同
  • 参数顺序不同 如:
public class Demo{
 public int add(int a,int b){return a+b;}
 public double add(double a,double b){return a+b;}
 public double add(int a,double b){return a+b;}
 public double add(double a,int b){return a+b;}
}

当调用重载方法时,JVM是根据参数列表来判断出准确的方法的。

递归[recursive]

递归就是指方法直接或间接地调用自己。利用递归可以用简单的程序来解决一些复杂的问题,比如:斐波那契数列的计算、汉诺塔问题、快排等问题。递归结构包括两个部分:

  1. 定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
  2. 递归体。解答:什么时候需要调用自身方法。

如:求一个整数的阶乘。5! = 5*4!; 4! = 4*3!; 3! = 3*2!; 2! = 2*1!; 1! = 1;使用数学公式就可以表达为:f(n) = n*f(n-1);所以,递归要有2个条件,也就是上面说的递归结构的两个部分。一要有规律,二要有退出时机。

:使用递归时方法的效率不是很高,它对栈的容量有较大的要求,因为每一次的调用都是利用栈来保存中间的计算结果,直到最后一次递归返回结果。如果栈不够的话,则JVM会抛出StackOverflowException

/* 求阶乘方法 */
public static long factorial(int n){
 if(n==1){//递归头
  return 1L;
 }else{//递归体
  return factorial(n-1);//n! = n * (n-1)!
 }
}

/* 所有用递归可以实现的方法都可以使用非递归实现。 */
/* 非递归求阶乘方法 */
public static long factorialLoop(int n){
 long result = 1;
 while(n > 1){
  result *= n * (n-1);
  n -= 2;
 }
 return result;
}

/* 求整数的二进制字符串形式 */
public String toBinary(int n){
 if(n==0){//退出条件
  return "";
 }
 return toBinary(n/2)+n%2;
}

/* 汉诺塔问题 */
public void move(char a, char b, char c, int n) {
 //
 if(n == 1){
  System.out.println(a+" -> "+c);
 }
 //调用自己
 move(a, c, b, n-1);
 System.out.println(a + " -> "+c);
 //再调用自己
 move(b, a, c, n-1);
}

修饰符[modifier]

访问控制修饰符piblic ,prootected,默认,private其他修饰符 static,abstract,final,syschronized,native,volatile... 注:修饰符之间是不没有顺序的。在java中,针对类的成员访问限权有四种,分别对应四种修饰符。

全局子类同包本身
publicYYYY
protectedNYYY
默认NNYY
privateNNNY

返回类型[return type]

1.所有合法的数据类型【包含基本数据类型和自定义对象】

表示这个方法有返回值,则在代码体中必须有return语句,并返回与表示这个方法有一致类型的。2.void表示这个方法没用返回值,则在代码体中可以不写return语句,如果一定要写,只能写空返回,如:return;

参数列表[parameters]

参数列表就是局部变量【Local variable】,它的语法与变量一样,只是不能初始化。如有多个参数,则每个参数之间使用逗号隔开。

如:

public int add(int a,int b){
 //...
}

当这个参数被调用[invoke]之时,它的参数才会有值【传递进来】。

所以,对于参数,有两种叫法:形参,是在方法的定义时所叫,它只有类型,暂时无值。实参,实在方法的调用时所叫,它既有类型又有值。

异常列表

异常定义

java异常[exception]定义:是一种“信号”传递机制 如:

int i = ...;
int j = ...;

if(i / j == ...) { //有可能会出现异常【除0异常】
 //...
}
//...

一段代码中,如果存在“有可能”出现异常的代码,而你的程序中又没有针对它做出“处理”,则一旦出现异常,程序就有可能会异常结束,从而达不到你的预期。

会有哪些异常?

java的异常可以分为:A. 运行时异常,也叫未检查异常;B. 非运行时异常,也叫已检查异常;

运行时异常,也叫未检查异常

所有直接或间接继承于RuntimeException异常的类都叫未检查异常,有:NullPointerException 空指针异常ClassCastException  类型转换异常ArrayIndexOutofBoundsException 下标越界异常 ... 以上这类异常都有一个共性:都是在JVM内部造成的,而不是由外部环境引起的。所以,这种异常可以说是由程序员编码粗心造成的。解决方案是:希望程序员编码谨慎,比如:对象使用之前做非空判断,....

非运行时异常,也叫已检查异常

它们直接或间接继承于Exception类,或者换句话说,只要不是RuntimeException的子类,就是已检查异常。如:IOException,SqlException,FileNotFoundException,NetException, ... 以上这些异常也有一些共性,就是它们都是由JVM外部环境造成的,所以,对于此类异常,光编码谨慎是不够的,还有做出处理。

注:在java中,对异常还有更高层次的抽象,叫可抛出的,由java.lang.Throwable来表示。

java.lang.Throwable
 \- java.lang.Error [错误] 无需处理它
 \- java.lang.Exception [异常] 重视
    \- RuntimeException 未检查异常
    \- 直接继承或间继承于 Exception 的类

如何处理异常?

有如下两种处理方式A. 消极处理方式,B. 积极处理方式。

消极处理方式

利用 关键字 throws 把异常抛出。如:

public void ma() throws InterruptedException {
    Scanner sc = new Scanner(System.in);
    System.out.print("please enter int>");
    //
    int i = sc.nextInt(); //这个方法有可能会抛出异常的。
    //但是,由于是未检查异常,所以,可以不用处理。
    
    //...
    Thread.sleep(1000); //这个方法也是有可能会抛出异常的.
    //这个异常是已检查异常,所以,必需要做出处理
    //...
}

积极处理方式

利用 try catch finally 语句块来处理这个语句块有多种不同的变种。如:

try {
    //有可能出现异常的代码
    ...
} catch(异常类型 e) {
    //...做日志,或者可以恢复...
} catch (异常类型 e) {
    //...
}

还有:

try {
    //有可能出现异常的代码
    ...

} catch(异常类型 e) {
    //...做日志,或者可以恢复...
} finally {
    //... 一般做释放资源
}
//....

注:不管try块中的代码是否出现了异常,finally块总会执行,除非在try块中执行了 System.exit(1) //退出JVM 进程

还有:

try {
    //....
    ...
} finally {
    //...一般做释放资源
}

自定义异常类

自定义异常类一般是自定义已检查异常。只需要定义一个类继承 java.lang.Exception 类即可,并且重写父类的构造方法。

如:

public class BalanceNotEnoughException extends Exception {
    public BalanceNotEnoughException() { super(); }

    public BalanceNotEnoughException(String msg) { super(msg); }

    public BalanceNotEnoughException(Throwable cause) { super(cause); }

    public BalanceNotEnoughException(String msg,Throable cause){
        super(msg,cause);
    }
}

结束语

欢迎关注本号,获取更多Java知识。

6683306974e7296a35202249df23f3ef.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打包指令_Linux系统常用指令总结

来源 | CSDN 博客作者 | 不撸代码闲得慌,责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)系统的运行级别0:关机1:单用户模式(可以找回丢失的密码)2:多用户状态没有网络服务3:多用户状态有网络服务4&#xff1…

python秒转化为时间格式_Python耗费时间秒转 天小时分钟秒 时间格式美化

在工作中经常会遇到将耗时 转换为天小时分秒的情况本Demo 中divmod默认返回元组,同时利用递归的思想# -*- coding: utf-8 -*-def seconds_format(time_cost: int):"""耗费时间格式转换:param time_cost::return:"""min 60hour 60 *…

angular做语言切换_angular多语言配置详解

angular的国际化方案,采用ngx-translate来实现。安装模块:npm install ngx-translate/core --save在根模块中导入:// other moduleimport {TranslateModule} from ngx-translate/core;NgModule({declarations: [AppComponent,],imports: [// …

cmd管道无法接收特定程序返回值_渗透不会反弹shell?来教你写一个cmd的shell

渗透不会反弹shell?来教你写一个cmd的shell包含的库:#include #include #include #include #include #pragma comment(lib, "Ws2_32.lib")#define DEFAULT_BUFLEN 1024winsock2和ws2tcpip两个库文件是用来初始化网络套接字的。windows用来初始…

有类似split的命令吗_5分钟学linux命令之split

情景介绍平时工作中,我习惯使用rz从本地上传文件到服务器,sz从服务器下载文件到本地,但对传输文件大小有限制,例如排查线上jvm的问题,需要生成了dump文件,可能有10G大,超过了限制,怎…

乐观锁的颗粒度_MySql数据库锁机制详解

概述数据库锁定机制简单的来说,就是数据库为了保证数据的一致性与完整性,而使各种共享资源在被并发访问时变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁机制,所以MySQL也不能例外。MySQL数据库根据锁锁定数据的颗粒度可…

云溪怎么导入dxf_dwg怎么转换成dxf文件?超详细图文教程分享

在CAD相关的工作中,我们经常遇到这种问题,需要把DWG格式的CAD图纸转换成DXF格式。那么,我们应该怎么做呢?接下来为你介绍这一个方法,非常方便快速哦。准备电脑风云CAD转换器具体步骤:在桌面上新建文件夹,将…

特斯拉是l3还是l2_比特斯拉还“高一级”,长安的“L3级自动驾驶”到底什么来头?...

3月5日,长安发布了旗下全新轿跑SUV——UNI-T,新车一经亮相,便凭借极具科幻的造型,以及越级的动力性能吸粉无数。而在大家意犹未尽之时,长安又在3月10日,通过UNI-T发布了“L3级自动驾驶”量产体验&#xff0…

unreal4怎么设置游戏模式_在Unreal4中如何连接自定义服务器

如何在Unreal4中连接自定义服务器?UE4 dedicated server是一个很好的游戏服务器,但是对于大厅和聊天服务器来说,我们要自行开发,通过UE4的socket组建很方便的和其他服务器建立连接。创建SocketFSocket* Socket ISocketSubsystem:…

mysql8 优化_MySQL 8.0 优化

优化效果(从大到小):硬件设备 -> MySQL数据库 -> Linux操作系统 -> 表设计—————————————————————————————————————-1硬件设备优化提升硬件设备,例如使用SSD高速磁盘,CPU等。—————————…

mysql的timestamp类型_MySQL数据库中的timestamp类型与时区

MySQL的timestamp类型时间范围between 1970-01-01 00:00:01 and 2038-01-19 03:14:07,超出这个范围则值记录为0000-00-00 00:00:00,该类型的一个重要特点就是保存的时间与时区密切相关,上述所说的时间范围是UTC(Universal Time Coordinated)标…

mysql处理时间_MYSQL时间处理  (转)

1.存储日期时间用now();2.存储日期用curdate()/current_date;3.存储时间用time();4.获取年份用year();5.获取月份用month();6.获取月份中的日期用day()或者dayofmonth();7.获取昨天就用date_sub(curdate(),interval 1day)/date_sub(current_date,interval 1 day);或者curdate()…

mysql导入数据比原来多_Oracle和MySQL的数据导入,差别为什么这么大

经常会有一些朋友咨询我一些数据库的问题,我注意到一个很有意思的现象,凡是数据导入的问题,基本上都是Oracle类的,MySQL类的问题脑子里想了下竟然一次都没有。我禁不住开始思考这个未曾注意的问题:为什么Oracle导入数据…

mysql5.7.17配置_mysql-5.7.17-winx64的安装配置

第一步:下载mysql-5.7.17-winx64解压版本:http://dev.mysql.com/downloads/mysql/第二步:解压到安装目录,如:C:\myprogram\mysql-5.7.17-winx64第三步:设置环境变量操作如下:1)右键单击我的电脑…

mysql 8核16g参数优化_问个 MySql 优化问题, 16G, 8 核服务器??

服务器配置:处理器:Xeon E3-1230 V2内存:16G DDR3 1600Mhz硬盘:1TB 企业级硬盘我现在的配置[mysqld]port xxxxsocket xxxdatadir xxxxdefault_storage_engine MyISAM#skip-external-locking#loose-skip-innodbkey_buffer_size …

mysql zero fill_mysql zerofill 的使用

mysql zerofill的使用:那这个int[M]中M是什么意义喃,在定义数值型数据类型的时候,可以在关键字括号内指定整数值(如:int(M),M的最大值为255)显示最大显示宽度,显示宽度M与数据所占用空间,数值的…

mysql第四项_mysql数据库的基本介绍与操作(第四篇-mysql索引篇)

索引概述:索引(也就是mysql中常说的键值key)是存储引擎用户快速找到记录的一种数据结构,这是索引的基本功能,索引对于良好的性能非常关键,尤其是当表中数据量越来越大的时候,索引对性能的影响就越重要,在数据量较小且负载较低时,不恰当的索引对性能的影响可能不明显,但当数据量…

openstack实例控制台显示响应时间过长_监控OpenStack的技巧

如果你以前曾在云平台上工作过,你一定熟悉这些系统的分布式和解耦性质。解耦的分布式系统依赖于微服务来执行特定的任务,每个微服务都会暴露自己的REST(表示状态转移)API。这些微服务通常以诸如RabbitMQ或QPID等消息中间件的形式通过轻量级消息层相互通信…

java8 创建list方式_Java 8 创建 Stream 的 10 种方式,我保证你受益无穷!

今天来分享下在 Java 8 中创建 Stream 的 10 种方式,我就整理了 10 种,其实还有更多,仅供大家参考学习下。 1、Stream.of 可变参数 Stream<String> stream1 = Stream.of("A", "B", "C"); System.out.println("stream1:" + st…

apache php mysql 整合_PHP+Apache+MySQL整合

整合PHPApacheMySQL非常郁闷&#xff0c;抗战到凌晨1&#xff1a;50分&#xff0c;终于胜利了。分享一下配置过程错误处理的历程&#xff0c;希望对后来人有所帮助。一、文件安装PHP下载&#xff1a;http://windows.php.net/downloads/qa/php-5.4.0alpha2-Win32-VC9-x86.zipMyS…