Java基础3

1. 程序的执行流程有几种

    1). 顺序结构:执行时会按照代码的书写顺序从上而下执行

    2). 分支结构 (单路分支, 多路分支):是一种特别情况,程序执行时会依据某种条件判断去执行判断的流程。所谓的条件判断的结果就是由条件表达式或逻辑表达式所返回的结果,它是布尔类型,如果是true则执行流程1,否则执行流程2。例如if 、while、swich case等,分支执行让程序具有了一种选择功能,也可以让程序在不同的情况去实现不同的逻辑。

判断条件为a是否小于等于11,满足输出true,不满足输出4; 

    3). 循环结构:有时候程序需要重复地执行某一代码时,就为循环执行。循环也必须要有判断停止循环的条件,,通过条件是否满足来决定是否执行循环代码块。也存在死循环的情形,但这种情况要尽量避免,因为它会永久地占用cpu的资源。

这是for循环与while循环,必须有条件判断他们循环什么时候结束 

    4). 函数的调用与返回:返回值就是函数内部代码运行后的一个结果

                                           调用就是用其他函数使用提供返回值的函数

写一个函数名为s1的函数他提供一个返回值s

 

在主函数里调用s1函数 

2. 整理选择分支的语法

    单if:必须有一个判断的条件,输出条件成立的结果

    互斥 if...else:会有俩种结果,如果条件成立输出成立的结果,如果条件不成立输出不成立的结果

    多分支互斥 if...else if...else if...else:多件事情需要同时判断时可以使用多分支

    嵌套的if:当同一件事结果很多时,比如一个if结果判断完之后还需要再判断输出的结果时需要用到嵌套if

    switch...case:如果表达式的值匹配其中的某个 case 常量,程序流就会跳转到该 case 标签后面的语句。如果没有匹配的 case 常量,程序流就会跳转到 default 标签后的语句,需要break跳出循环

3. 整理循环语法

   (1) while:while (条件)
{
        语句;
}

当条件为真,则执行下面的语句;语句执行完之后再判断条件是否为真,如果为真,再次执行下面的语句;然后再判断条件是否为真……就这样一直循环下去,直到条件为假,跳出循环。这个就是 while 的执行顺序

   (2) do...while:do
{
    语句;
}
while (条件);

do…while 和 while 的执行过程非常相似,唯一的区别是:“do…while“ 不管条件为不为真都执行一次,然后再判别条件”。当条件为“真”时,返回重新执行循环体,如此反复,直到条件为“假”为止,此时循环结束

  (3)  for:for (循环变量赋初值; 判断条件; 自增/减)
{
        语句;
}

判断条件,若其值为真,则执行 for 语句中指定的内嵌语句,然后执行第3步;若表达式2值为假,则结束循环

(4)循环的4要素

初值设定、循环判断条件、循环体、循环变量调整

(5)什么是函数?

    函数是一系列指令的集合, 通过函数封装指令, 可以达到代码复用的目的

    函数是组织代码的最小单元

    类是程序的最小单元

(6)什么是静态函数, 函数的组成部分, 函数调用时需要注意什么

      静态函数:静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避

      免了调用函数时压栈出栈,速度快很多

      函数的组成部分: 函数头,即函数的第一行,包括函数名称、函数类型、函数属性、函数

      参数(形式参数)名称和参数类型;  函数体是函数的具体实现逻辑。

      函数调用时需要注意什么:1.实际参数的类型与形式参数的类型匹配。 2.实际参数与形式

      参数的个数要相同。 3.实际参数与形式参数的类型个数要一一对应。

 (7)主函数和普通函数的区别是什么

        主函数 main () 实际上就是这个进程的起始执行点,普通函数就是一段代码,进程会跳

        转到   普通函数中执行它的函数体,执行完毕后就返回到上层函数调用中

主函数可以用private修饰吗? 为什么?

        不可以,主函数用private修饰是运行不了的

        原因:变量和属性是有区别的:变量是方法体中定义的,我们称为临时变量。
        属性是类体中定义的。 而权限标示符只用于修饰属性和方法。不修饰变量。

       方法中定义的临时变量在方法调用完成之后就不存在了,不需要用修饰符定义!

   1. 权限修饰符

        public : 公共的, 可以在任何外部类中调用

        private: 私有的, 只能在本类的内部调用

        (default)默认不写权限修饰符: 同包的, 只能在同一个包里面调用

   2. 静态修饰符

        static 函数必须添加static修饰符, 如果没有static修饰, 就不是函数, 而是方法

        方法的调用方式跟函数是不一样的

   3. 返回值类型

        写 void 代表函数没有返回值

        写一种具体的类型 代表函数有返回值, 并且约定了返回值的类型

            例如: 返回值类型的double, 那么调用方调用后, 只能用double类型的变量来接受函数的返回值

          并且函数内必须用return返回值的double类型的操作数出去

   4. 函数名: 函数的语法格式为“修饰符 返回值类型 函数名 (形式参数类型1 参数名1...) {函数体

     语句;return 返回值;}”

   5. 参数列表:参数列表中的参数用逗号分开,列表中包含了传递给调用函数的变量的声明。如

    果函数不接收任何参数,参数列表就声明为void

   6. 函数体:包含指定函数行为的语句的复合语句

   7. 返回值:一个 函数 的函数名既是该函数的代表,也是一个 变量 。. 由于函数名变量通常用

   来把函数的处理结果数据返回给调用函数,即 递归调用 ,所以一般把函数名变量称为返回

   值,  函数的返回值类型是在定义函数时指定的

 

 

  

5. 参数:参数,也叫参变量,是一个变量。有形参和实参。我们在研究当前问题的时候,关心某几个变量的变化以及它们之间的相互关系,其中有一个或一些叫自变量,另一个或另一些叫因变量。如果我们引入一个或一些另外的变量来描述自变量与因变量的变化,引入的变量本来并不是当前问题必须研究的变量,我们把这样的变量叫做参变量或参数

6. 什么是类加载

指的是将的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构

7. 什么是方法区

储存字节码文件的区域

9. 静态变量与局部变量的区别

     定义的位置不同

        静态变量: 定义在函数外面, 类的里面

        局部变量: 定义在函数里面

     作用域不同

        静态变量: 当前类中所有的函数都可以使用

        局部变量: 只能在当前函数内使用

     局部变量一定不可以被外部访问, 因为不可用加访问权限修饰符

     静态变量可以被外部访问, 因此可以添加访问权限修饰符

10. 什么是栈, 什么是栈帧

是java中的栈实际上就是满足后进先出的性质,是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除

栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

栈帧(Stack Frame)是用来支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。

栈帧(Stack Frame)存储了方法的局部变量表、操作数栈、动态连接、和方法返回地址、额外的附加信息。

每个方法在执行的同时,都会创建一个栈帧(Stack Frame)。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。

11. break、continue、return的作用和区别

    break是跳出循环

    continue是结束本轮循环, 进入下一轮循环

    return是函数返回

12. 画出JVM内存结构图

13. 什么是debug

debug是一位名叫葛丽丝霍波(Grace Hopper)的美国海军准将及计算机科学家,同时也是世界最早的一-批程序设计师之一。 有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而"卡”住了机器的运行。于是,霍波诙谐的把程序故障统称为"臭虫(BUG)”,把排除程序故障叫DEBUG。而本质上Debug是一种程序,一种调试工具,说白了就是供程序员检查修改问题的工具

14. 什么是递归

  • 在一个方法内部对自身进行调用。
  • 利用递归可以用简单的程序来解决一些复杂的问题。比如:裴波那契数列的计算、汉诺塔、快排等问题

15. 整理以下关键字

    class      定义类

    public     公共的

    private    私有的

    if         开始一个选择分支, if后面跟小括号,小括号里面的操作数是判断条件, 可以是直接量,变量,表达式, 但必须是boolean类型

    else       else后面不跟条件, 但是else if后面必须跟条件

    switch     开始一个选择分支, switch后面跟小括号

               小括号里面的操作数只能是byte, short, int, char类型

               Java5后支持枚举类型

               Java7后支持String类型, 但通过观察字节码可以发现, 本质上还是int类型

               注意, switch不支持long类型, 也不支持浮点型和boolean类型

    case       是switch中的一个分支, 后面跟直接量, 直接量与switch()中的操作数的数据类型必须相同

    default    在switch中所有case都不满足时执行default分支, 它相当于是多重if分支中的最后的else, 是所有情况都不满足时, 默认执行的分支

    break      1. 用于跳出switch...case

               2. 用户跳出循环

               如果有循环嵌套循环, 那么break跳出的是最近的那个循环

    while      开始一个循环, while后面跟小括号,小括号里面的操作数是判断条件, 可以是直接量,变量,表达式, 但必须是boolean类型

    do         do必须和while组合使用, do在前面, while在后面, 先执行一次do, 再通过判断while条件是否成立, 来决定是否循环

    for        开始一个循环, for后面跟小括号, 小括号里面有3组表达式, 分别是循环变量初始化, 循环条件, 循环变量的迭代

    continue   本轮循环结束, 进入下一轮循环

    void       函数没有返回值

    return     函数返回,

               后面可以什么都不跟, 也可以跟一个操作数, 具体要看函数是否定义了返回值类型

    static     静态的

16.Java中Math类常用的数学函数

Math.E                          //自然常数e=2.7182818284590452354
Math.abs(12.3);                 //12.3 返回该值的绝对值  
Math.abs(-12.3);                //12.3  

Math.copySign(1.23, -12.3);     //-1.23,返回第一个参数的量值和第二个参数的符号  
Math.copySign(-12.3, 1.23);     //12.3  

Math.signum(x);                 //如果x大于0则返回1.0,小于0则返回-1.0,等于0则返回0  
Math.signum(12.3);              //1.0  
Math.signum(-12.3);             //-1.0  
Math.signum(0);                 //0.0  


//指数  
Math.exp(x);                    //e的x次幂  
Math.expm1(x);                  //e的x次幂 - 1  

Math.scalb(x, y);               //x*(2的y次幂)  
Math.scalb(12.3, 3);            //12.3*2³  

//取整  
Math.ceil(12.3);                //返回最近的且大于该值的整数13.0  
Math.ceil(-12.3);               //-12.0  

Math.floor(12.3);               //返回最近的且小于该值的整数12.0  
Math.floor(-12.3);              //-13.0  

//x和y平方和的二次方根  
Math.hypot(x, y);               //√(x²+y²)  

//返回该值的二次方根  
Math.sqrt(x);                   //√(x) x的二次方根  
Math.sqrt(9);                   //3.0  
Math.sqrt(16);                  //4.0  

//返回该值的立方根  
Math.cbrt(27.0);                //3   
Math.cbrt(-125.0);              //-5  

//对数函数  
Math.log(e);                    //1 以e为底的对数  
Math.log10(100);                //10 以10为底的对数  
Math.log1p(x);                  //Ln(x+ 1)  

//返回较大值和较小值  
Math.max(x, y);                 //返回x、y中较大的那个数  
Math.min(x, y);                 //返回x、y中较小的那个数  

//返回x的y次幂  
Math.pow(x, y);                   
Math.pow(2, 3);                 //即2³ 即返回:8  

//随机返回[0,1)之间的无符号double值  
Math.random();                    

//返回最接近该值的整数,如果居中,则取偶数  
Math.rint(12.3);                //12.0   
Math.rint(-12.3);               //-12.0  
Math.rint(78.9);                //79.0  
Math.rint(-78.9);               //-79.0  
Math.rint(34.5);                //34.0  
Math.rint(35.5);                //36.0  

Math.round(12.3);               //与rint相似,返回值为long  

//三角函数  
Math.sin(α);                    //sin(α)的值  
Math.cos(α);                    //cos(α)的值  
Math.tan(α);                    //tan(α)的值  

//求角  
Math.asin(x/z);                 //返回角度值[-π/2,π/2]  arc sin(x/z)  
Math.acos(y/z);                 //返回角度值[0~π]   arc cos(y/z)  
Math.atan(y/x);                 //返回角度值[-π/2,π/2]  
Math.atan2(y-y0, x-x0);         //同上,返回经过点(x,y)与原点的的直线和经过点(x0,y0)与原点的直线之间所成的夹角  

Math.sinh(x);                   //双曲正弦函数sinh(x)=(exp(x) - exp(-x)) / 2.0;  
Math.cosh(x);                   //双曲余弦函数cosh(x)=(exp(x) + exp(-x)) / 2.0;  
Math.tanh(x);                   //tanh(x) = sinh(x) / cosh(x);  

//角度弧度互换  
Math.toDegrees(angrad);         //角度转换成弧度,返回:angrad * 180d / PI  

Math.toRadians(angdeg);         //弧度转换成角度,返回:angdeg / 180d * PI  

17.数组类型

数组是多个相同类型数据按一定顺序排列 的集合,并使用一个名字命名,并通过编号的方式 对这些数据进行统一管理

一维数组

二维数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值