返回值

java中的异常以及 try catch finally以及finally的执行顺序

谁说我不能喝 提交于 2020-01-18 01:55:06
java中的 try、catch、finally及finally执行顺序详解: 1、首相简单介绍一下异常以及异常的运行情况: 在 Java 中异常的继承主要有两个: Error和Exception 这两个,而Error就是jvm出现错误,以及系统奔溃等现象这些错误没办法通过程序来处理,所以在程序中不能使用catch来捕捉处理这类的异常。 对于Exception 又可以分为checkedException 和RuntimeException 这两种异常,checkedException异常在进行编译运行之前就可以知道会不会发生异常,如果不对这些异常进行抛出、捕获的话就不能通过编译。而RuntimeException就是运行的时候出现的异常在之前你是没办法确定是不是会出现异常。 异常处理过程: 把会出项异常的程序段放在try中,当抛出异常的时候就会系统会生成一个异常对象,然后进行查找捕获这个异常然后进行处理这个异常,处理之后接着执行下面的程序。 出现异常之后如果没有进行捕获处理系统就会直接将这个异常栈的跟踪信息直接打印出来之后就结束这个程序的执行。 2、为什么要用finally 先看一个没有finally的异常处理try-catch语句: 假设count为要使用到的资源,并且用完要求释放此资源。那么我们可以把释放资源的语句放到try-catch后执行

Java语言学习总结 进阶篇 方法

南楼画角 提交于 2020-01-17 21:56:17
方法 方法就是一段独立的代码片段,这段代码片段可以完成某个功能,并且可以重复使用。在 c语言中叫做函数 。 方法定义在类体当中,在类当中可以定义多个方法,没有先后顺序。 方法体中不能再定义方法。 方法体中的代码自上而下执行 如何定义方法 [修饰符列表] 返回值类型 方法名 (形式参数列表){ 方法体; } 1.1 修饰列表 可选项,不是必须的 目前统一写成: public statio 由方法的修饰符列表当中有static关键字的话,怎么调用这个方法? -类名.方法名(供际参数列表); 1.2 返回值类型 在方法完成某个功能之后,返回最终的执行结果,可以是一个具体存在的数据。这个数据就是返回值 返回值是具体存在的数据,返回值类型就是指定的数据类型。任何数值类型皆可制定。 返回值也不是必须的,没有返回值时此处写 void 需要返回值时在方法体中用 return 来返回。 返回值类型是void时不能有return 值 。可以写“return; ” 执行return语句时,所在方法结束。 1.3 方法名 必须是合法标识符。 最好可以见名知意,最好是动词, 首字母要求小写,后面每个单词首字母大写 1.4 形式参数列表 形参是局部变量 int a; double b; 可以有n个,用,(逗号)隔开。 形参中起决定作用的是形参的数据类型。 1.5 方法体必须由大括号括起来,有顺序

深入理解 Java 方法

主宰稳场 提交于 2020-01-16 15:22:29
目录   1. 方法的使用   2. 方法参数   3. 方法修饰符   4. 特殊方法   5. 覆写和重载   6. 小结   7. 参考资料 方法(有的人喜欢叫函数)是一段可重用的代码段。 📓 本文已归档到:「 javacore 」 🔁 本文中的示例代码已归档到:「 javacore 」 1. 方法的使用 1.1. 方法定义 方法定义语法格式: [修饰符] 返回值类型 方法名([参数类型 参数名]){ ... 方法体 ... return 返回值; } 示例: public static void main(String[] args) { System.out.println("Hello World"); } 方法包含一个方法头和一个方法体。下面是一个方法的所有部分: 修饰符 - 修饰符是可选的,它告诉编译器如何调用该方法。定义了该方法的访问类型。 返回值类型 - 返回值类型表示方法执行结束后,返回结果的数据类型。如果没有返回值,应设为 void。 方法名 - 是方法的实际名称。方法名和参数表共同构成方法签名。 参数类型 - 参数像是一个占位符。当方法被调用时,传递值给参数。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。 方法体 - 方法体包含具体的语句,定义该方法的功能。 return - 必须返回声明方法时返回值类型相同的数据类型

CreateThread给线程函数传递的参数

不羁岁月 提交于 2020-01-16 06:20:18
HANDLE WINAPI CreateThread ( __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, // 指向SECURITY_ATTRIBUTES 的指针,为新线程指定安全描述 __in SIZE_T dwStackSize, // 初始化线程堆栈尺寸 __in LPTHREAD_START_ROUTINE lpStartAddress, //线程函数所指向的地址起始函数 __in_opt LPVOID lpParameter, // 给线程函数传递的参数 __in DWORD dwCreationFlags, // 有关线程的标志 __out_opt LPDWORD lpThreadId //系统分配给线程的ID ); ----第一个参数是安全属性,一般设为null,使用缺省的安全属性。当我们想此线程有另外的子进程时,可改变它的属性。 ----第二个参数是线程堆栈尺寸,一般设为0,表示与此应用的堆栈尺寸相同,即主线程与创建的线程一样长度的堆栈。并且其长度会根据需要自动变长。 ----第三个参数,也是最重要的一个,是一个指向函数名的指针,或者函数名字 ---- 第四个参数是你需要向线程函数传递的参数,一般是一个指向结构的指针。不需传递参数时,则这个参数设为null。 ----第五个参数,传入与线程有关的一些标志

【翻译】深入浅出Python装饰器之基本用法

為{幸葍}努か 提交于 2020-01-15 15:57:15
深入浅出Python装饰器 前言 前两天被问到装饰器的概念,在我的理解里:装饰器就是一个函数,他的参数为函数,一般用来对参数进行一些额外的处理,但不影响参数函数的表现。 但说实话写的不多,于是就想查一下资料具体看一下。而前两天发现谷歌设置为中英文,搜索结果的排序都不一样。于是就翻了下英文的资料,看完之后感觉讲的的确不错,就诞生了想尝试翻译一下的想法,于是就有了本文。 老外讲东西太细了,所以有些显而易见的话会被我过滤掉……另外,高级用法暂时未翻。 本文翻译自 Primer on Python Decorators 的第一部分,深入浅出是个人翻译,Primer原义为入门读物,所以也可以翻译为Python装饰器入门指南。 翻译正文 目录 本文的结构如下: 函数 第一类对象(First-Class Objects) 内置函数 返回值为函数的函数 简单的装饰器 语法糖 一个重复使用的装饰器 带参数的装饰器函数 装饰器函数的返回值 你是谁啊?(函数名) 一些真实用例 计时函数 代码调试 减速/延迟执行的代码 插件注册 检查用户是否登陆的装饰器 华丽的装饰器/装饰器的高级用法 装饰类 多重装饰器 带参装饰器 多功能装饰器(带参不带参均可) 含有状态的装饰器 另外一些真实用例 减速/延迟执行的代码 单例模式的实现 缓存返回值 向单元里添加信息 验证JSON是否合理 总结 深入阅读 另:此文有配套

帮助大家理解一下递归函数的返回值...

瘦欲@ 提交于 2020-01-15 09:28:07
如题: 递归函数往往可以简化我们的代码,尤其是对树的遍历和利用回溯算法写代码的时候,但是递归函数的返回值往往是困扰我们的。 总体来说,我们先要理解函数的调用过程,函数调用过程会用栈来保存函数的返回值和过程, 而递归函数就是调用自身函数的过程,所以也是用栈存储 ,这样就比较容易理解了。 下面一段代码可以帮助大家理解递归函数的返回值。 1 package test; 2 3 4 public class RecursionValueReturn { 5 6 /* 7 *目的: 8 * 递归返回值测试 9 */ 10 11 int recurse(int i) 12 { 13 if(i == 0) 14 { 15 return 0; 16 } 17 else 18 { 19 i--;//i--必须放在前面,由于函数的中间结果值用栈保存,不然i--无法执行,会使递归函数对系统的栈用光 20 recurse(i); 21 //i--; 22 } 23 24 System.out.print(" "+ i); 25 return i; 26 27 } 28 29 public static void main(String[] args) { 30 // TODO Auto-generated method stub 31 RecursionValueReturn result = new

Lambda函数式接口

半世苍凉 提交于 2020-01-15 05:44:50
函数式接口 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口可以被隐式转换为 lambda 表达式。 Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。 如定义了一个函数式接口如下: @FunctionalInterface interface GreetingService { void sayMessage ( String message ) ; } 那么就可以使用Lambda表达式来表示该接口的一个实现(注:JAVA 8 之前一般是用匿名类实现的): GreetingService greetService1 = message - > System . out . println ( "Hello " + message ) ; 函数式接口可以对现有的函数友好地支持 lambda。 JDK 1.8 之前已有的函数式接口: java.lang.Runnable java.util.concurrent.Callable java.security.PrivilegedAction java.util.Comparator java.io.FileFilter java.nio.file.PathMatcher java.lang.reflect

python

吃可爱长大的小学妹 提交于 2020-01-15 00:46:52
import os print('Process (%s) start...' % os.getpid()) # Only works on Unix/Linux/Mac: pid = os.fork()#os.fork()创建2个进程,返回值为0时,表示子进程,返回值为子进程号是---父进程os.getpid()表示当前进程 if pid == 0: print('I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid())) else: print('I (%s) just created a child process (%s).' % (os.getpid(), pid))    来源: https://www.cnblogs.com/heishanyaoren/p/12194677.html

Scala 学习(2)之「函数」

∥☆過路亽.° 提交于 2020-01-14 19:48:35
文章目录 有返回值函数 无返回值函数 默认参数 命名参数 变长参数 使用序列调用变长参数 使用递归函数实现累加 过程 Lazy 异常 有返回值函数 def 函数名(参数名 : 参数类型): 返回值类型 = { // 函数体 } 无返回值函数 // 不声明返回值类型的函数前提是右侧函数体不包含递归的语句 def 函数名(参数名 : 参数类型) = { // 函数体 } // 又或者 def 函数名(参数名 : 参数类型): Unit = { // 函数体 } 默认参数 def sayHello(firstName:String, middleName:String = "William", lastName:String = "Croft") : String = { firstName + " " + middleName + " " + lastName } // 如果给出的参数不够,则会从左往右依次应用参数 命名参数 sayHello("Mick", lastName = "Mike", middleName = "Jack") // 可以混合使用未命名参数和带名参数,但是未命名参数必须排在带名参数前面 变长参数 def sum(nums : Int*) = { var res = 0 for (num <- nums) res += num res } 使用序列调用变长参数

进程和线程(线程是轻量级进程)(下)

99封情书 提交于 2020-01-14 18:53:03
跨线程访问 点击“测试”,创建一个线程,从0循环到10000给文本框赋值,代码如下: private void btn_Test_Click(object sender, EventArgs e) { //创建一个线程去执行这个方法:创建的线程默认是前台线程 Thread thread = new Thread(new ThreadStart(Test)); //Start方法标记这个线程就绪了,可以随时被执行,具体什么时候执行这个线程,由CPU决定 //将线程设置为后台线程 thread.IsBackground = true; thread.Start(); } private void Test() { for (int i = 0; i < 10000; i++) { this.textBox1.Text = i.ToString(); } } 运行结果: 产生错误的原因: textBox1是由主线程创建的,thread线程是另外创建的一个线程,在.NET上执行的是托管代码,C#强制要求这些代码必须是线程安全的,即不允许跨线程访问Windows窗体的控件。 解决方案: 1、在窗体的加载事件中 ,将C#内置控件( Control )类的 CheckForIllegalCrossThreadCalls 属性设置为 false ,屏蔽掉C#编译器对跨线程调用的检查。