关于JS中的函数和数组,Java中的this和Thread的回顾

本文对比了JavaScript与Java的基础概念,包括数组的使用方法、函数声明的不同方式、实参与形参的区别,以及线程的简单回顾。同时分享了学习算法与数据结构的方法建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天新学内容JS
第一点,
(1)Array类,数组,在JS中的数组就相当于Java中的list集合(个数任意,数据类型任意)
2种创建方式
静态:var obj = [10,20,true,’小火车’,455];
动态:var obj2 = new array();
(2)
var time = new Date();
alert(time);
alert(time.toDateString());
alert(time.getFullYear());

函数类型对象

(有关函数声明的三种方式)
1,标准声明–>开发中基本都用的这个
特点:在浏览器加载遇到这个函数认为开发人员创建实例对象myFun,在myFun对象管理的内存中,存放一个具体函数执行体,myFun会有对函数体的调用能力,因此JS中,认为myFun是function数据类型,也体现了面向对象思想,每声明一个函数,就相当于创建一个function类型对象
myFun();
function myFun(){
alert(“myFun is run….”);
}
myFun();//位置任意
//浏览器加载网页的时候,会把script标签中的内容自动分配给window对象。
所以调用方法的时候可加可不加。

2和3都相当命令行,只有运行后才能调用myFun()

2,匿名声明–>命令行时在函数运行时候执行
var myFun2 = function(){alert(“myFun2 is run”)};//这就相当一个命令行
3,构造函数声明函数,同2,也相当一个命令行
var myFun3 = new Function(){‘p1’,’p2’,”var p3 = p1+p2;alert(“p3=”+ p3);”};
myFun6(1)–》当你调一个参数的时候,另一个相当于undefined类型,所以相加结果为NaN,错误的数据类型,
alert(myFun3(1,8))执行结果,p3=9 还有个窗口写着undefined(这是如何来的)

这样来的,相当于

var myFun6 = new Function();
alert(myFun6());//undefined
,因为alert(函数)没有任何返回值. 所以alert弹出信息框的内容就是undefined

(有关函数的参数)
有关java中的动态参数回顾{
public void test(int…param){

         }
         int...是动态参数,表示当前方法test运行时,可以没有实参
         表示当前方法test运行时,可以有任意个数的int类型实参
         表示当前方法test运行时,可以接收一个int类型数组作为实参

}

要是有调用函数必须带实参这种想法是不对的?

JS中效仿Java中的动态参数,因此JS在运行时,实参个数和形参个数可以不一致
function myFun(p1,p1){
alert(“myFun is run…”);
}
myFun();//正常运行
myFun(10);//正常运行
myFun(10,450,true,’abc’,new Date()); //正常运行

有关得到实参个数和实参值

(1)运行时得到
因为实参个数和形参个数不必一致,浏览器创建函数类型实例对象时,会自动为函数类型实例对象
分配一个【arguments】属性,这个属性是一个数组,里面存放的是
当前函数运行时所接收的所有实参—-》知道了运行时调用时接收的实参个数和内容
function myFun5(){
var paramNum = arguments.length;
alert(“实参个数=”+paramNum);

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

                    alert("实参数值"+arguments[i])
                }
            }
        myFun5('abd',true,20,456,"ccd",new Date());//6

(2)声明中得到参数个数
function myFun (p1,p2,p3) {

        }
        //myFun.length这里出错了,对象myFun记住
        alert("函数声明时声明了多少形参"+ myFun.length);

有关arguments的callee属性—处理递归问题
function myFun(param){
if(param <=1){
return 1;
}else{
//return param + myFun(param-1);
return param + arguments.callee(param-1);
}

        }
        alert(myFun(3));//1+2+3=6

思考题:执行结果,若报错原因,怎样改#

结果:抛出错误
原因如下
修改:return param + arguments.callee(param-1);//因为arguments(属性)的callee作用是(属性指向函数对象所管理的内存)

回归下Java的this属性

(1)Java中的this与JS中的this指向一致。
(2)Java中的this出现位置
(a)出现在构造方法中:表示由构造方法创建的实例对象
(b)出现在普通方法:表示当前方法的实例对象
浏览器加载完成,生成实例对象myFun –联系->拥有执行能力对函数执行体
var fun1= myFun;//执行后,生成有一个新的实例对象fun1指向函数执行体
myFun= null;切断了myFun和函数执行体的联系,指向了空内存块(不可添加数据)
alert(fun1(3));//fun1(3)–》去函数执行体执行,当碰到
return param + myFun(param-1),此时的myFun是个Object数据类型,名下无函数,所以出现语法错误

第二点,关于Thread的回顾
今天主要简单模拟了植物大战僵尸
还有关于线程优先级的理解:单核CPU情况下
设置t1为优先级高,并不是说他先执行完,只不过是分配CPU时间片的时间长些。要比t2先执行完的几率大些
线程在Java语言中使用抢占式调度模型,
分为10,5,1分别是MAX_PRIORITY,NORMAL_PRIORITY,MIN_PRIORITY
线程默认是普通5。主线程是先执行最后走的

public class TestThread {
    public static void main(String[] args) {
        //设置线程的优先级,必须在启动线程前设置
        Runnable r = new Processor();
        //创建线程对象
        Thread t1 = new Thread(r,"t1");
        Thread t2 = new Thread(r,"t2");
        //设置线程的优先级,必须在启动线程前设置
        t1.setPriority(Thread.MAX_PRIORITY);
        t1.start();
        t2.start();
        System.out.println("t1的优先级" + t1.getPriority()+",t2的优先级:" + t2.getPriority());
    }




}
class Processor implements Runnable{

    @Override
    public void run() {
        for(int i = 0;i < 100;i++){
            //Thread.currentThread() 返回当前正在执行的线程对象
            System.out.println(Thread.currentThread().getName() +"----->"+ i);
        }

    }


}

第三点 今天阅读感悟
读了mind hacks 中有关算法思维的介绍和关于学习方法的借鉴=
密集型学习,让这些你学的东西时时刻刻在你脑子里,多动手,保持热情,纸笔随时可记录,
目前对算法里面的属于不懂,哈几里德,背包等,这些新鲜词可以去了解,
主要是先去阅读作者有关读书思维和如何从证明定理,和证明的思路由来,能够知道自己现在的思维误区和学习中应改进的地方
从下周开始,课余时间把数据结构去了解,还有think in java英文原版书,去看,熟悉计算机的英语语言,争取做到能够顺下来思路。
去寻找书中案例源码,可以照猫画虎。
重点还是放在复习JavaSE中的重点知识。去练练追踪源码,看书。多敲代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值