当前位置: 首页 > news >正文

网站开发用到哪些技术中国建设集团官网

网站开发用到哪些技术,中国建设集团官网,大田县建设资讯网站,关键词seo资源目录 一.方法的概念及使用 1 什么是方法(method) 2.方法定义 3 方法调用的执行过程 4 实参和形参的关系(重要) 5.没有返回值的方法 二.方法重载 1.为什么需要方法重载 2.方法重载概念 3.方法签名 三.递归 1.递归的概念 2.递归执行过程分析 3. 递归练习 一.方法的…目录 一.方法的概念及使用 1 什么是方法(method) 2.方法定义 3 方法调用的执行过程 4 实参和形参的关系(重要) 5.没有返回值的方法 二.方法重载 1.为什么需要方法重载 2.方法重载概念 3.方法签名   三.递归 1.递归的概念 2.递归执行过程分析 3. 递归练习 一.方法的概念及使用 1 什么是方法(method) 方法就是一个代码片段 . 类似于 C 语言中的 函数 。方法存在的意义 ( 不要背 , 重在体会 ): 1是能够模块化的组织代码 ( 当代码规模比较复杂的时候 ). 2做到代码被重复使用 , 一份代码可以在多个位置使用 . 3让代码更好理解更简单 . 4直接调用现有方法开发 , 不必重复造轮子 . 比如现在要开发一款日历在日历中经常要判断一个年份是否为闰年则有如下代码 int year 1900; if((0 year % 4 0 ! year % 100) || 0 year % 400){System.out.println(year年是闰年); }else{System.out.println(year年不是闰年); } 2.方法定义 方法语法格式 // 方法定义 修饰符 返回值类型 方法名称([参数类型 形参 ...]){方法体代码;[return 返回值]; } 示例一 实现一个函数检测一个年份是否为闰年 public class Method{ // 方法定义public static boolean isLeapYear(int year){if((0 year % 4 0 ! year % 100) || 0 year % 400){return true;}else{return false;}} } 示例二 : 实现一个两个整数相加的方法 【 注意事项 】 1修饰符现阶段直接使用 public static 固定搭配 2返回值类型 如果方法有返回值返回值类型必须要与返回的实体类型一致如果没有返回值必须写成 void 3方法名字采用小驼峰命名 4参数列表如果方法没有参数 () 中什么都不写如果有参数需指定参数类型多个参数之间使用逗号隔开 5方法体方法内部要执行的语句 6在 java 当中方法必须写在类当中 7在 java 当中方法不能嵌套定义 8在 java 当中没有方法声明一说不同于C语言 3 方法调用的执行过程 【 方法调用过程 】 调用方法 --- 传递参数 --- 找到方法地址 --- 执行被调方法的方法体 --- 被调方法结束返回 --- 回到主调方法继续往下 执行 【 注意事项 】 1定义方法的时候 , 不会执行方法的代码 . 只有调用的时候才会执行 . 2一个方法可以被多次调用 . 代码示例 1 计算两个整数相加 public class Method {public static void main(String[] args) {int a 10;int b 20;System.out.println(第一次调用方法之前);int ret add(a, b);System.out.println(第一次调用方法之后);System.out.println(ret ret);System.out.println(第二次调用方法之前);ret add(30, 50);System.out.println(第二次调用方法之后);System.out.println(ret ret); }public static int add(int x, int y) {System.out.println(调用方法中 x x y y);return x y;} } // 执行结果 一次调用方法之前 调用方法中 x 10 y 20 第一次调用方法之后 ret 30 第二次调用方法之前 调用方法中 x 30 y 50 第二次调用方法之后 ret 80  代码示例: 计算 1! 2! 3! 4! 5! public class TestMethod {public static void main(String[] args) {int sum 0;for (int i 1; i 5; i) {sum fac(i);}System.out.println(sum sum);}public static int fac(int n) {System.out.println(计算 n 的阶乘中n! n);int result 1;for (int i 1; i n; i) {result * i;}return result;} } // 执行结果 计算 n 的阶乘中 n! 1 计算 n 的阶乘中 n! 2 计算 n 的阶乘中 n! 3 计算 n 的阶乘中 n! 4 计算 n 的阶乘中 n! 5 sum 153 使用方法 , 避免使用二重循环 , 让代码更简单清晰 4 实参和形参的关系(重要) 方法的形参相当于数学函数中的自变量比如1 2 3 … n的公式为sum(n) 1/21n*nJava中方法的形参就相当于sum函数中的自变量n用来接收sum函数在调用时传递的值的。形参的名字可以随意取对方法都没有任何影响形参只是方法在定义时需要借助的一个变量用来保存方法在调用时传递过来的值。 public static int getSum(int N){ // N是形参return (1N)*N / 2; } getSum(10); // 10是实参,在方法调用时形参N用来保存10 getSum(100); // 100是实参在方法调用时形参N用来保存100 再比如 public static int add(int a, int b){return a b; } add(2, 3); // 2和3是实参在调用时传给形参a和b 注意 在 Java 中实参的值永远都是拷贝到形参中形参和实参本质是两个实体 代码示例 : 交换两个整型变量 public class TestMethod {public static void main(String[] args) {int a 10;int b 20;swap(a, b);System.out.println(main: a a b b); } public static void swap(int x, int y) {int tmp x;x y;y tmp;System.out.println(swap: x x y y);} } // 运行结果 swap: x 20 y 10 main: a 10 b 20 可以看到在 swap 函数交换之后形参 x 和 y 的值发生了改变但是 main 方法中 a 和 b 还是交换之前的值即没有交换成功。 实参 a 和 b 是 main 方法中的两个变量其空间在 main 方法的栈 ( 一块特殊的内存空间 ) 中而形参 x 和 y 是 swap 方法中的两个变量x 和 y 的空间在 swap 方法运行时的栈中因此实参 a 和 b 与形参 x 和 y 是两个没有任何关联性的变量 在 swap 方法调用时只是将实参 a 和 b 中的值拷贝了一份传递给了形参 x 和 y 因此对形参 x 和 y 操作不会对实参 a 和 b产生任何影响。 注意对于 基础类型 来说 , 形参相当于实参的拷贝 . 即 传值调用 int a 10; int b 20; int x a; int y b; int tmp x; x y; y tmp; 可以看到 , 对 x 和 y 的修改 , 不影响 a 和 b。 【 解决办法 】 : 传引用类型参数 ( 例如数组来解决这个问题 ) public class TestMethod {public static void main(String[] args) {int[] arr {10, 20};swap(arr);System.out.println(arr[0] arr[0] arr[1] arr[1]); } public static void swap(int[] arr) {int tmp arr[0];arr[0] arr[1];arr[1] tmp;} } // 运行结果 arr[0] 20 arr[1] 10 5.没有返回值的方法 方法的返回值是可选的 . 有些时候可以没有的没有时返回值类型必须写成 void 代码示例 class Test {public static void main(String[] args) {int a 10;int b 20;print(a, b); }public static void print(int x, int y) {System.out.println(x x y y);} } 另外 , 如刚才的交换两个整数的方法 , 就是没有返回值的 . 二.方法重载 1.为什么需要方法重载 public class TestMethod {public static void main(String[] args) {int a 10;int b 20;int ret add(a, b);System.out.println(ret ret);double a2 10.5;double b2 20.5;double ret2 add(a2, b2);System.out.println(ret2 ret2); }public static int add(int x, int y) {return x y;} }// 编译出错 Test.java:13: 错误: 不兼容的类型: 从double转换到int可能会有损失 double ret2 add(a2, b2);^ 由于参数类型不匹配 , 所以不能直接使用现有的 add 方法 . 一种比较简单粗暴的解决方法如下 public class TestMethod {public static void main(String[] args) {int a 10;int b 20;int ret addInt(a, b);System.out.println(ret ret);double a2 10.5;double b2 20.5;double ret2 addDouble(a2, b2);System.out.println(ret2 ret2); }public static int addInt(int x, int y) {return x y; }public static double addDouble(double x, double y) {return x y;} } 上述代码确实可以解决问题但不友好的地方是需要提供许多不同的方法名而取名字本来就是让人头疼的事 情。那能否将所有的名字都给成 add 呢 2.方法重载概念 在自然语言中经常会出现“一词多义”的现象比如“好人”。 在自然语言中一个词语如果有多重含义那么就说该词语被重载了具体代表什么含义需要结合具体的场景。 在Java 中方法也是可以重载的。 在Java中如果多个方法的名字相同参数列表不同则称该几种方法被重载了。 public class TestMethod {public static void main(String[] args) {add(1, 2); // 调用add(int, int)add(1.5, 2.5); // 调用add(double, double)add(1.5, 2.5, 3.5); // 调用add(double, double, double) }public static int add(int x, int y) {return x y; }public static double add(double x, double y) {return x y; }public static double add(double x, double y, double z) {return x y z;} } 注意 1方法名必须相同 2参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同) 3与返回值类型是否相同无关 // 注意两个方法如果仅仅只是因为返回值类型不同是不能构成重载的 public class TestMethod {public static void main(String[] args) {int a 10;int b 20;int ret add(a, b);System.out.println(ret ret);}public static int add(int x, int y) {return x y;}public static double add(int x, int y) {return x y;} } // 编译出错 Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int) public static double add(int x, int y) {^ 1 个错误 4 编译器在编译代码时会对实参类型进行推演根据推演的结果来确定调用哪个方法 3.方法签名   1在同一个作用域中不能定义两个相同名称的标识符。比如方法中不能定义两个名字一样的变量那 为什么类中就 可以定义方法名相同的方法呢 2方法签名即经过编译器编译修改过之后方法最终的名字。具体方式 方法全路径名 参数列表 返回值类型构成 方法完整的名字。 public class TestMethod {public static int add(int x, int y){return x y;}public static double add(double x, double y){return x y;}public static void main(String[] args) {add(1,2);add(1.5, 2.5);} } 上述代码经过编译之后然后使用 JDK 自带的 javap 反汇编工具查看具体操作 1先对工程进行编译生成 2在控制台中进入到要查 3输入 javap -v 字节码 方法签名中的一些特殊符号说明 特殊字符数据类型VvoidZbooleanBbyteCcharS short IintJlongFfloatDdouble[ 数组 ( 以 [ 开头配合其他的特殊字符表述对应数据类型的数组几个 [ 表述几维数组 ) L 引用类型以 L 开头以 ; 结尾中间是引用类型的全类名 三.递归 生活中的故事 从前有坐山山上有座庙庙里有个老和尚给小和尚将故事讲的就是 从前有座山山上有座庙庙里有个老和尚给小和尚讲故事讲的就是 从前有座山山上有座庙 ... 从前有座山 …… 上面的两个故事有个共同的特征 自身中又包含了自己 该种思想在数学和编程中非常有用因为有些时候我们 遇到的问题直接并不好解决但是发现将原问题拆分成其子问题之后子问题与原问题有相同的解法等子问题解 决之后原问题就迎刃而解了 。 1.递归的概念 一个方法在执行过程中调用自身, 就称为 递归. 递归相当于数学上的 数学归纳法, 有一个起始条件, 然后有一个递推公式. 例如 , 我们求 N! 起始条件 : N 1 的时候 , N! 为 1. 这个起始条件相当于递归的结束条件. 递归公式 : 求 N! , 直接不好求 , 可以把问题转换成 N! N * (N-1)! 递归的必要条件 1. 将原问题划分成其子问题注意子问题必须要与原问题的解法相同 2. 递归出口 代码示例: 递归求 N 的阶乘 public static void main(String[] args) {int n 5;int ret factor(n);System.out.println(ret ret); } public static int factor(int n) {if (n 1) {return 1;}return n * factor(n - 1); // factor 调用函数自身 } // 执行结果 ret 120 2.递归执行过程分析 递归的程序的执行过程不太容易理解 , 要想理解清楚递归 , 必须先理解清楚 方法的执行过程 , 尤其是 方法执行结束之后, 回到调用位置继续往下执行 . 代码示例 : 递归求 N 的阶乘 public static void main(String[] args) {int n 5;int ret factor(n);System.out.println(ret ret); } public static int factor(int n) {System.out.println(函数开始, n n);if (n 1) {System.out.println(函数结束, n 1 ret 1);return 1;}int ret n * factor(n - 1);System.out.println(函数结束, n n ret ret);return ret; } // 执行结果 函数开始, n 5 函数开始, n 4 函数开始, n 3 函数开始, n 2 函数开始, n 1 函数结束, n 1 ret 1 函数结束, n 2 ret 2 函数结束, n 3 ret 6 函数结束, n 4 ret 24 函数结束, n 5 ret 120 ret 120 执行过程图 递归比较耗费内存空间复杂度高 关于 调用栈 : 方法调用的时候 , 会有一个 栈 这样的内存空间描述当前的调用关系 . 称为调用栈 . 每一次的方法调用就称为一个 栈帧 , 每个栈帧中包含了这次调用的参数是哪些 , 返回到哪里继续执行等信息 . 后面我们借助 IDEA 很容易看到调用栈的内容 . 3. 递归练习 代码示例1 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) public static void print(int num) {if (num 9) {print(num / 10);}System.out.println(num % 10); } 代码示例2 递归求 1 2 3 ... 10 public static int sum(int num) {if (num 1) {return 1;}return num sum(num - 1); } 代码示例 3 写一个递归方法输入一个非负整数返回组成它的数字之和 . 例如输入 1729, 则应该返回1729它的和是 19 public static int sum(int num) {if (num 10) {return num;}return num % 10 sum(num / 10); } 代码示例 4 求斐波那契数列的第 N 项 斐波那契数列介绍 : https://baike.sogou.com/v267267.htm? fromTitle%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97 public static int fib(int n) {if (n 1 || n 2) {return 1;}return fib(n - 1) fib(n - 2); } 当我们求 fib(40) 的时候发现 , 程序执行速度极慢 . 原因是进行了大量的重复运算 class Test {public static int count 0; // 这个是类的成员变量. 后面会详细介绍到.public static void main(String[] args) {System.out.println(fib(40));System.out.println(count); } public static int fib(int n) {if (n 1 || n 2) {return 1;}if (n 3) {count;}return fib(n - 1) fib(n - 2);} } // 执行结果 102334155 39088169 // fib(3) 重复执行了 3 千万次. 可以使用循环的方式来求斐波那契数列问题 , 避免出现冗余运算 public static int fib(int n) {int last2 1;int last1 1;int cur 0;for (int i 3; i n; i) {cur last1 last2; //这两个式子不能互换last2 last1;last1 cur;}return cur; } 此时程序的执行效率大大提高了 4.汉罗塔问题
http://www.zqtcl.cn/news/570102/

相关文章:

  • 详细描述建设网站wordpress 子页面
  • 做公司网站推广如何快速推广
  • 给期货交易类做网站违法吗青海企业网站制作
  • 成都网站模板购买一站式营销型网站建设服务
  • wordpress建站优势做网站认证对网站有什么好处
  • synology做网站专业企业建站价格
  • php开发大型网站开发免费个人微网站
  • 专门做奢侈品的网站怎么建设课题网站
  • 博客推广那个网站列好深圳社保个人网页登录
  • 网站的背景图怎么做最新章节 第一百四十七章 做视频网站
  • 济南网站建设百家号阿里云怎么wordpress
  • 网站分享对联广告北京建设执业网站
  • 一级做爰片免费网站域名流量查询
  • 做网站网站需要注意什么网站建设swot市场分析
  • 大学生兼职网站的融资方案云凡济南网站建设开发
  • 做动态效果的插件网站抚顺清原网站建设招聘
  • 商务网站开发需求分析厦门35网站建设公司
  • wordpress classseo推广服务
  • 石景山网站建设公司网站后台密码如何破解
  • 哪个大学的网站做的最好看南宁网站设计制作公司
  • 北京 集团公司网站建设免费网站建设模版云盘
  • 阿里云建设网站要什么广州网站建设方案案例
  • 德阳吧网站建设线上编程培训机构哪家好
  • 天津电商网站开发备案查询站长之家
  • 网至普的营销型网站布局青岛做网站
  • 网站开发的安全问题wordpress文章列表显示缩略图
  • 网站运营招聘代理商加盟
  • 清远 网站建设自己做的网站怎么发布
  • 可以做免费推广的网站短视频app有哪些
  • 班级网站建设的系统概述wordpress品牌分类