lcx-前端

1.ajax请求方式、参数类型、状态码?

请求方式

请求方式:Get,Post

 

参数类型

url: 要求为String类型的参数,发送请求的地址。

type: 要求为String类型的参数,请求方式(post或get)默认为get。

timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。

async要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。

cache要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false)。

data: 要求为Object或String类型的参数,发送到服务器的数据。

dataType要求为String类型的参数,预期服务器返回的数据类型。

 

         xml:返回XML文档,可用JQuery处理。

        html:返回纯文本HTML信息;

         script:返回纯文本JavaScript代码。不会自动缓存结果。

         json:返回JSON数据。

         jsonp:JSONP格式。

         text:返回纯文本字符串。

 

状态码

200     成功处理了请求,一般情况下都是返回此状态码;

400    服务器不理解请求的语法。

404   服务器找不到请求的网页。

500   (服务器内部错误)  服务器遇到错误,无法完成请求。

502   (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

2. Jquery常用的选择器?

1.1、ID选择器 #id

 

描述:根据给定的id匹配一个元素, 返回单个元素

 

示例:$("#test") 选取 id 为 test 的元素

 

1.2、类选择器 .class

 

描述:根据给定的类名匹配元素,返回元素集合

 

示例:$(".test") 选取所有class为test的元素

 

1.3、元素选择器 element

 

描述:根据给定的元素名匹配元素,返回元素集合

示例:$("p") 选取所有的

 

元素

1.4、*

描述:匹配所有元素,返回元素集合

示例:$("*") 选取所有的元素

 

3.前后端是如何做数据交互的?前端怎么传给后端json数据?

一、通过表单传递参数

 

前端怎么传给后端json数据?

二、通过ajax传递参数(有post和get写法)

前端向后端传递json数据时,需要使用JSON.stringify()将json对象转化为json字符串。

Django后端接收前端传递过来的json数据,不能使用request.POST而是要使用request.body

1.第一种:ajax

传给后台的数据通过json封装起来,再用ajax将json传到后台

2、通过form表单的action传值

一般情况下数值在传给后台之前需要校验,可以在form中的onsubmit调用js方法进行校验,当js方法返回值为true时,触发action,当js方法返回值为false时,action不触发。

这样处理的好处在于当用户输入不正确时,不会刷新页面,表单仍然会保留用户之前的输入

JS方法: JSON.stringfiy(demo);

4.前端和后台都是如何解决跨域问题的?

一个系统访问另一个系统才会存在跨域,同系统访问不存在跨.
跨域是指跨域名的访问,以下情况都属于跨域:
1.
域名不同: www.jd.com 与 www.taobao.com
2.域名相同,端口不同: www.jd.com:8080 与 www.jd.com:8081
3. 二级域名不同: www.baidu.wenku.com www.baid.tieba.com

如果域名和端口都相同,但是请求路径不同,不属于跨域,如:
www.jd.com/item

www.jd.com/goods
只要域名(ip)和端口号有一样不同,那么都是跨域
http://localhost:8080 前端系统 发送Ajax取后端系统获取数据
http://localhost:80 后端系统

跨域不一定会有跨域问题。

因为跨域问题是浏览器对于ajax请求的一种安全限制:

一个页面发起的ajax请求,只能是于当前页同域名的路径,这能有效的阻止跨站攻击。
因此:跨域问题是针对ajax的一种限制。

 

- 1.Jsonp-- json变种

  最早的解决方案,利用动态去填充script标签可以跨域的原理实现。

      <sccipt src=”http:/wwww/ssss”>

限制:

​      需要服务的支持

​      只能发起GET请求

 

- 2.nginx反向代理(部署)

  思路是:利用nginx反向代理把跨域变为不跨域,支持各种请求方式

  原理是:前端的请求访问后端是跨域,nginx代理会让他的请求转回去访问自己,就不存在跨域问题了,而nginx会代理前端的请求发送一个和后端域名端口一致的请求,再返回数据,相当于避免了前端跨域的直接请求。

缺点:需要在nginx进行额外配置,语义不清晰 –

 

- 3.CORS(都可以使用-采纳)

  规范化的跨域请求解决方案,安全可靠。

  优势:

  - 在服务端进行控制是否允许跨域,可自定义规则

  - 支持各种请求方式

    缺点:

  - 会产生额外的请求,要做询问

 

前端

利用反向代理实现跨域

反向代理需要用到nginx

实现原理

原理大体相同,但是处理的端不同,反向代理实在服务器端进行处理。

首先修改hosts文件,将域名指向开发者的电脑本身,把自己伪装成服务端,

再通过nginx对不同的请求进行转发,把静态资源指向开发者本地电脑的资源,将接口指向实际的服务器。

后台

使用cors

5.前端如何防止表单重复提交?

一:前端利用JavaScript防止表单重复提交

​        1.设置submit按钮属性为disabled,然后当后台请求成功移除这个属性。

​        2.用flag标识,当表单被提交过一次后checkSubmitFlg将变为true,根据判断将无法进行提交。

二:利用Session防止表单重复提交

三:使用重定向也可以解决form表单重复提交问题

利用Session防止表单重复提交(推荐)

实现原理:

服务器返回表单页面时,会先生成一个subToken保存于session,并把该subToenk传给表单页面。

当表单提交时会带上subToken,服务器拦截器Interceptor会拦截该请求,拦截器判断session保存的subToken和表单提交subToken是否一致。

若不一致或session的subToken为空或表单未携带subToken则不通过。

首次提交表单时session的subToken与表单携带的subToken一致走正常流程,然后拦截器内会删除session保存的subToken。

当再次提交表单时由于session的subToken为空则不通过。从而实现了防止表单重复提交。

6.Vue的生命周期?

vue的指令?

vue的双向绑定如何实现?

vue如何实现自定义事件?

vue如何实现监听?

vue如何实现请求?

vue的路由跳转方式?

  1. Vue的生命周期?

vue生命周期是指vue实例对象从创建之初到销毁的过程,

vue生命周期可以分为八个阶段,

分别是:

beforeCreate(创建前),

created(创建后),

beforeMount(载入前),

mounted(载入后),

beforeUpdate(更新前),

updated(更新后),

beforeDestroy(销毁前),

destroyed(销毁后)

 

Vue的指令?

 

1. v-text

v-text主要用来更新textContent,可以等同于JS的text属性。

<span v-text="msg"></span>

这两者等价:

<span>{ {msg}}</span>

 

2. v-html

双大括号的方式会将数据解释为纯文本,而非HTML。为了输出真正的HTML,可以用v-html指令。它等同于JS的innerHtml属性。

<div v-html="rawHtml"></div>

这个div的内容将会替换成属性值rawHtml,直接作为HTML进行渲染。

 

3. v-pre

v-pre主要用来跳过这个元素和它的子元素编译过程。可以用来显示原始的Mustache标签。跳过大量没有指令的节点加快编译。

<div id="app">

  <span v-pre>{ {message}}</span> //这条语句不进行编译

  <span>{ {message}}</span>

</div>

最终仅显示第二个span的内容

 

4. v-cloak

这个指令是用来保持在元素上直到关联实例结束时进行编译。

javascript

<div id="app" v-cloak>

  <div>

    { {message}}

  </div>

</div>

<script type="text/javascript">

  new Vue({

   el:'#app',

   data:{

    message:'hello world'

   }

  })

</script>

在页面加载时会闪烁,先显示:

javascript

<div>

  { {message}}

</div>

然后才会编译为:

html

<div>

  hello world!

</div>

 

5. v-once

v-once关联的实例,只会渲染一次。之后的重新渲染,实例极其所有的子节点将被视为静态内容跳过,这可以用于优化更新性能。

<span v-once>This will never change:{ {msg}}</span> //单个元素

<div v-once>//有子元素

  <h1>comment</h1>

  <p>{ {msg}}</p>

</div>

<my-component v-once:comment="msg"></my-component> //组件

<ul>

  <li v-for="i in list">{ {i}}</li>

</ul>

123456789

上面的例子中,msg,list即使产生改变,也不会重新渲染。

 

6. v-if

v-if可以实现条件渲染,Vue会根据表达式的值的真假条件来渲染元素。

<a v-if="ok">yes</a>

如果属性值ok为true,则显示。否则,不会渲染这个元素。

 

7. v-else

v-else是搭配v-if使用的,它必须紧跟在v-if或者v-else-if后面,否则不起作用。

<a v-if="ok">yes</a>

<a v-else>No</a>

 

8. v-else-if

v-else-if充当v-if的else-if块,可以链式的使用多次。可以更加方便的实现switch语句。

<div v-if="type==='A'">

  A

</div>

<div v-if="type==='B'">

  B

</div>

<div v-if="type==='C'">

  C

</div>

<div v-else>

Not A,B,C

</div>

 

vue 的双向绑定如何实现?

 

vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。

1.实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。

2.实现一个订阅者Watcher,每一个Watcher都绑定一个更新函数,watcher可以收到属性的变化通知并执行相应的函数,从而更新视图。

3.实现一个解析器Compile,可以扫描和解析每个节点的相关指令(v-model,v-on等指令),如果节点存在v-model,v-on等指令,则解析器Compile初始化这类节点的模板数据,使之可以显示在视图上,然后初始化相应的订阅者(Watcher)。

 

vue 如何实现自定义事件?

自定义事件

 监听$on(eventName)

   触发$emit(eventName)

基本使用方法如下

使用app.$on('text',function(){})来自定义一个事件,实例中我使用click点击事件来触发addn 中的 app.$emit('text')给事件传递参数'hi';

app.$on监听到text 执行打印  value

 

vue如何实现监听?

1.绑定keyup事件

2.watch监听数据变化

使用这个 属性,可以监视 data 中指定数据的变化,然后触发这个 watch 中对应的 function 处理函数
该方法可以不用绑定事件

 

Vue如何实现请求?

Vue 请求数据方式有:

vue-resource、axios、fetchJsonp三种。

其中,vue-resource 是 Vue官方提供的插件,axios 与 fetchJsonp 是第三方插件。

 

 

Lambda简介

Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。

 

vue的路由跳转方式?

router-link标签

this.$router.push跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面**

this.$router.replace跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)**

this.$router.go(n)向前或者向后跳转n个页面,n可为正整数或负整数**

 

生命周期:从开始创建初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。

vue的指令:

v-text

v-text主要用来更新textContent,可以等同于JS的text属性。

v-if

v-if可以实现条件渲染,Vue会根据表达式的值的真假条件来渲染元素。

v-for

用v-for指令根据遍历数组来进行渲染

v-bind

v-bind用来动态的绑定一个或者多个特性

3 vue的双向绑定如何实现?

1 数据双向绑定(v-model)配合vue中的data

vue如何实现自定义事件

使用 $on(eventName) 监听事件

使用 $emit(eventName) 触发事件

vue如何实现监听?

$watch

vue如何实现请求

axios

vue的路由跳转方式

router-link标签

ps : 区别

this.$router.push

跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面

this.$router.replace

跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)

this.$router.go(n)

向前或者向后跳转n个页面,n可为正整数或负整数

7.get和post有什么区别?

 1、 GET主要用于从服务器查询数据,POST用于向服务器提交数据

 2、 GET通过URL传递数据,POST通过http请求体传递数据

 3、 GET传输数据量有限制,不能大于2kb,POST传递的数据量较大,一般大量的数据提交都是通过POST方式

  1. GET安全性较低,容易在URL中暴漏数据,POST安全性较高

Sphinx:

父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为data里面的数据即可

Sphinx:

子传父的实现方式就是用了 this.$emit 来遍历 getData 事件,首先用按钮来触发 setData 事件,在 setData 中 用 this.$emit 来遍历 getData 事件,最后返回 this.msg

 

 

1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。

  2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。

  3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。

  4. Get执行效率却比Post方法好。Get是form提交的默认方法。

8. jquery如何获取当前日期?

```javascript

<html>

<head>

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

<title>jquery当前日期</title>

<script type="text/javascript" src="jquery-1.8.2.min.js"></script>

<script type="text/javascript">

 $(function(){

  function show(){

   var mydate = new Date();

   var str = "" + mydate.getFullYear() + "年";

   str += (mydate.getMonth()+1) + "月";

 str += mydate.getDate() + "日";

   return str;

  }

  $("input[type='button']").click(function(){

   $("p").html("今天是 " + show());

  });

 });

</script>

</head>

<body>

<input type="button" value="看看现在的时间" />

<p></p>

</body>

</html>

 

var myDate = new Date();           

var year=myDate.getFullYear();        //获取当前年

var month=myDate.getMonth()+1;  //获取当前月

var date=myDate.getDate();            //获取当前日

var h=myDate.getHours();              //获取当前小时数(0-23)

var m=myDate.getMinutes();          //获取当前分钟数(0-59)

var s=myDate.getSeconds();        //获取当前秒

var now=year+'-'+getNow(month)+"-"+getNow(date)+" "+getNow(h)+':'+getNow(m)+":"+getNow(s);

9.如何给画面中所有的 checkbox标签添加一个事件?

javascript

$(function(){

    var s = $("input[name='check']");//获取所有CheckBox标签

    s.each(function(i) {//遍历标签

//          alert(i);

            $(this).click(function(){//绑定事件

                if(this.checked==true){

                      alert(this.value);

                }

             });

        });

})

var x = document.getElementByTagName("checkbox").

var i;

for (i = 0; i < x.length; i++) {

x[i].onclick

}

10. jquery怎么打开一个模态窗口?

javascript

$('#myform').on('submit', function(ev) {

    $('#my-modal').modal({

        show: 'false'

    });

 

    var data = $(this).serializeObject();

    json_data = JSON.stringify(data);

    $("#results").text(json_data);

    $(".modal-body").text(json_data);

 

    // $("#results").text(data);

 

    ev.preventDefault();

});

 

SimpleModal是一个轻量级的jQuery插件,它提供了一个强大的界面模态对话框发展。

SimpleModal提供2个简单的方法来调用一个模式对话框。

(1)作为一个串连的jQuery函数,你可以调用一个jQuery元素modal()函数使用该元素的内容将显示一个模式对话框。

$("#element-id").modal();

(2)作为一个独立的功能,可以通过一个jQuery对象,一个DOM元素,或者一个普通的字符串(可以包含HTML)创建一个模态对话框

$("#element-id").modal({options});

$.modal("<div><h1>SimpleModal</h1></div>", {options});

11.表单验证是如何实现的?

1.正则表达式

 2.Vant-UI框架

 

用document获取输入框的value可以判断是否为空或者是否为数字

其他类型的校验 比如手机号 邮箱之类的可以用正则表达式校验

12. readonly和 disable有什么区别?

 ## 相同点

    - readonly和disabled都是可以禁止用户更改表单中的内容。比如都设为true,则form属性将不能被编辑

 

    ## 不同点

    - readonly只针对input(text/password)和textarea有效,而disabled对于所有的表单元素都有效,包括select,radio,checkbox等。

    - 表单在使用GET或POST方式提交时,表单元素在使用了readonly后,值可以传递到后台;而表单元素在使用disabled后值不可以传递到后台。

    - 所有控件都有disabled 属性,但是不一定有readonly属性;点击被readonly掉的按钮照样可以触发事件,但是被disabled掉的按钮就无法使用了不管上面有没有事件。

 

readonly并没有对input[type="button"]产生作用,按钮效果仍然在,并没有“不可用”;

而disabled直接对input[type="button"]的按钮效果产生作用,导致按钮不可点击。

disabled属性可以作用于所有的表单元素。

readonly只对可以输入的表单元素有效

13.如何画一个表格?如何合并单元格?

如何画一个表格?

1.css+html标签(td行、tr列)

 2.latex 表格命令

 

如何合并单元格?

 colspan是横向合并    rowspan是纵向合并

 

在<table></table>的标签内只要有几行就要写几个<tr></tr>,而<tr></tr>内又包含着<td></td>。

在th或者td中设置rowspan属性,用于合并两行的同一列单元格

14.如何获取一个文本框的内容?

 1.用js获取文本框的值:(推荐使用方法1)

    ​    方法1:**var value = document.getElementById("textId").value**                      //textId为文的id,此时inputValue为输入框的值

    ​    方法2:var value = document.getElementsByClassName("textClass").value     //注意:值为类名的元素值的集合

    ​    方法3:var value = document.getElementsByName("textName").value             //注意:值为带有指定名称的对象值的集合

    ​    方法4:var value = document.getElementsByTagName("标签名对应值").value //注意:值为带有指定标签名的对象值的集合

 

    2.用jquery获取文本框的值:(推荐使用方法1)

    ​    方法1:**var value = $("#textId").val()**

    ​    方法2:var value = $(".textClass").val()             //注意:值为类名的元素值的集合

 

var textbox= document.getElementById("textbox");

var text = textbox.value;

15. Jquery如何获取form表单的值?

 javascript

      $("#subbtn").click(function(){

                 var data = {};

   

                 var t = $('form').serializeArray();

                 $.each(t, function() {

                      data [this.name] = this.value;

                 });

                 alert(JSON.stringify(data ));

                });

 

把form表单的值序列化成一个Json对象,如{username:admin,password:123}

var params = $('#searchForm').serializeObject();

把form表单的值序列化成一个字符串,如username=admin&password=admin

var params = $('#searchForm').serialize();

将字符串转换为Json对象

JSON.parse(str)

16.前端如何延时调用一个函数?

 setTimeout(code,millisec)

    - **参数**

      1、回调函数, 需要隔一定时间后执行的函数

      2、每次调用间隔时间,单位是ms

 

WindowsetTimeout()方法

jQuerydelay()方法

17.如何取出树形结构的数据?前端如何显示树形结构数据?

先根遍历,中根遍历,后根遍历

迭代

递归

 

前端如何显示树形结构数据?

Z-tree

treeTable

 

 

首先先遍历所有的节点数据,生成id 和parent_id的关系,然后遍历id 和parent_id的关系,因此将子节点数据放入children 这个集合当中。

通过js遍历数据对象,拼接成dom字符串,插入到html中

18.js中的this在各种情况下的指向?

一、全局作用域或者普通函数自执行中this指向全局对象window

//全局作用域

       console.log(this);//Window

//普通函数

        function fn(){

           console.log(this); //Window

   }

    fn(); //函数加括号调用叫函数自执行,函数自执行时,内部的this指向顶层对象/window

1234567

 

二、事件函数内部的this指向事件源:注意在事件函数中如果包含普通函数,普通函数自执行后,内部this还是指向window

 

 //事件函数内部的this指向事件源

    document.body.onclick = function(){

 this.style.height = "1000px";

           console.log(this); //body对象

           function fn(){

           console.log(this); //Window

           }

           fn(); //函数加括号调用叫函数自执行,函数自执行时,内部的this指向顶层对象/window

        };

123456789

 

三、对象方法调用时,this指向调用的对象

let obj = {

    name : "lanlan",

     fn : function(){

         console.log(this);

     },

     lacy : {

         name : "didi",

         fn : function(){

             let num = 10;

             console.log(this);

         }

     }

 }; 

   obj.fn(); //obj

   obj.dudu.fn(); //lacy

 

情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,

这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。

情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。

情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象

19.如何将数据保存到前端?

localStorage用于长久的保存整个网站的数据(string类型存储),保存的数据没有过期时间,直到手动删除,并且localStorage的属性是只读的(不过如果是在浏览器的隐私模式下,它是不可读取的)。

另外,如果你只想将数据保存在当前会话下,可以使用sessionStorage,数据将会临时保存,关闭窗口后则会被删除。

 

语法

javascript

保存数据:

localStorage.setItem("key","value");

读取数据:

var getData=localStorage.getItem("key");

删除数据:

localStorage.removeItem("key");

 

虽然cookie可以存储一些数据,但是仍然存储下面一些缺点

  (1)cookie需要在客户端和服务器端之间来回传送,会浪费不必要的资源

  (2)cookie的存储大小有限制,对于每个域,一般只能设置20个cookie,每个cookie大小不能超过4KB

  (3)cookie的安全性,cookie因为保存在客户端中,其中包含的任何数据都可以被他人访问,cookie安全性比较低

Web存储机制

接下来,我们要说一下html5中的存储啦,主要是sessionStorage和localStrorage

由于sessionStorage对象是Storage的一个实例,所以存储数据时可以使用setItem()或者直接设置新的属性来存储数据

当我们要获取某个数据的时候,可以使用getItem来获取数据

于localStorage也是Storage的实例,可以像使用sessionStorage一样来使用它

20.如何实时刷新页面?

ajax

页面自动刷新:把如下代码加入<head>区域中

<meta http-equiv="refresh" content="5">

21.什么是http协议无状态协议?怎么解决http协议无状态协议?

http是无状态的协议,也是不安全的协议,

它的无状态是指对于事务处理没有记忆能力,缺少状态意味着后续的操作需要前面的信息。

解决办法:

1,通过cookie解决,

2,通过session会话保存。

 

HTTP无状态协议是指协议对于事务处理没有记忆能力。

缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

另一方面,在服务器不需要先前信息时它的应答就较快。

1、通过Cookies保存状态信息

通过Cookies,服务器就可以清楚的知道请求2和请求1来自同一个客户端。


2、通过Session保存状态信息

Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当 程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

Session的实现方式:

1、使用Cookie来实现

服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。

当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。


2、使用URL回写来实现

URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带会服务器。如果直接在浏览器输入服务端资源的url来请求该资源,那么Session是匹配不到的。

Tomcat 对Session的实现,是一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回 写。如果发现Cookie被禁用,就一直使用URL回写。jsp开发处理到Session的时候,对页面中的链接记得使用 response.encodeURL() 。

重写和重载的区别

首先是重载,重载就是在同一个类当中有多个名称相同方法,但各个相同方法的参数列表不同(无关返回值类型)。如下,在test3中三个方法名相同的add方法,第一个是两个int类型的书相加,第二个是三个int相加,第三个是两个float相加,他们的参数个数不同或类型不同就构成了重载。


重写则发生在不同的类当中,并且两者要有继承关系,重写是方法名字和参数的列表是要完全一致的,重写的意义在于父类的方法已经不能满足时,子类重写为自己需要的。如下,在父类Test3中num方法是想做两数的加法运算,而在子类Test4中我想做两数的减法运算,则继承的num方法不能满足,则重写为test4中的num方法进行减法运算

值传递和引用传递的区别

1、按值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。简单来说就是直接复制了一份数据过去,因为是直接复制,所以这种方式在传递时如果数据量非常大的话,运行效率自然就变低了

2、按引用传递:引用传递其实就弥补了上面说的不足,如果每次传参数的时候都复制一份的话,如果这个参数占用的内存空间太大的话,运行效率会很底下,所以引用传递就是直接把内存地址传过去,也就是说引用传递时,操作的其实都是源数据



 

猜你喜欢

转载自blog.csdn.net/abu1216/article/details/112299039