JavaSE学习day02

 流程控制语句:


                1)顺序结构语句
                         代码从进入main方法开始,依次由上而下按照顺序执行!
               2)选择结构语句

                          if语句:

                                格式1:if(表达式){

                                             语句;

                                            }

                                            如果语句只有一条,大括号可以省略,但是建议不要省略掉

                                格式2 :if(表达式){

                                                 语句;

                                            }else{

                                                   语句;

                                            }

                                格式三:if(表达式){

                                                    语句;

                                              }else  if (表达式){

                                                      语句;

                                              }else{

                                                      语句;

                                              }

      switch语句(面试重点):

                                表达式中的值和case值进行比较,如果选项1值和它一样,执行1,switch语句结束;

                                否则,就按照这种方式依次和case后面的值进行比较

                                如果上述都不匹配,就执行default语句

                        格式:     switch(表达式){

                                                case 选项1:语句;break;

                                                case 选项2:语句;break;

                                                case 选项3:语句;break;

                                                ...

                                                default :  语句;break;

                                        }

     ***** 面试题  switch后面的表达式可以是什么数据类型:
                                          1)byte,int等基本的数据类型
                                          2)enum(枚举类型): jdk5
                                          3)String(jdk7)

                      switch语句的注意事项:
                                       1)    case后面的值只能是常量
                                       2)    每个case语句中都有一个break,break表示结束switch语句的,遇见break,switch语句结束
                                                  那么如果不写break,会出现"case穿透"
                                      3)    switch语句的结束条件
                                                 a:  遇见break结束
                                                 b:  程序默认执行的到末尾

                                     4)default语句可以在switch语句中的任何位置,并且不影响程序的执行;default语句如果是在语句中,

                                                最好不要省略break, 但是如果在switch语句末尾 这个break是可以省略的!                      

         3)循环结构语句

                        for循环语句

                            格式:for(初始化变量 ;条件表达式 ;步长语句){ / /左大括号之前不能有分号

                                        循环体;

                                        }

                        for语句执行流程:1)先初始化化变量;

                                                    2)进行条件表达式的判断,如果为 true 则进入循环体,为false则跳出循环,结束

                                                    3)条件表达式为true,进入循环体;

                                                    4)执行步长控制语句;

                                                    5)这时不用再初始化,直接进行条件表达式判断,如果为true则进入3)继续循环,

                                                        为false就跳出循环结束;

                          while循环语句

                                    格式:while(条件表达式){

                                                    循环体;

                                                     步长控制语句;

                                             }

                                一般使用扩展格式:

                                            初始化变量;

                                            while(条件表达式){

                                                    循环体;

                                                     步长控制语句;

                                             }

  *****  面试题:
关于while循环和for循环的区别?
  

 1)    从内存角度考虑:

            for循环优于while循环,循环语句结束之后,变量就会被Jvm里面GC(垃圾回收器)回收掉释放掉内存,内存空间不会消耗太多!

            而while循环,是可以访问那个变量,它不会立即被回收掉!

 2)    从应用场景来考虑:
       如果,明确范围/次数,使用for循环  (优先考虑for循环,再考虑while)
                        举例:模拟登录,给3次机会,提示用户,超过3次,提示:请速联系管理员!
      如果不知道循环多少次,这个时候使用while循环

                        举例:吃葡萄


  do-while循环语句

                                    基本格式    :do{

                                                            循环体;

                                                            步长控制语句;    

                                                        }while(条件表达式);

                                    扩展格式:初始化语句;

                                                        do{

                                                            循环体;

                                                            步长控制语句;    

                                                        }while(条件表达式);


                                    注意:先执行循环体再进行条件表达式的判断;无论如何至少都会执行一次循环体

  *****面试题:
  do-while循环语句和for循环,while循环语句最大的区别?
           1)从格式来讲:    do-while循环语句的特点:循环体至少执行一次

           2)从应用场景来讲:    如果要是使用循环语句,优先考虑for循环,然后while循环,其次do-while循环


  跳转控制语句:

   break:表示中断,结束;

                                    一般在循环和switch语句中使用;

   continue:停止当前循环,立即进入下一次循环;

                                        不能单独使用,必须在循环中使用;

   return:返回语句,返回一个值;

 一般情况:在Java中自定义一个方法中必须有return语句(前提有return语句,那么该方法必须有返回值) 携带结果性的数据


   数组:是一个容器可以存储多个元素,这多个元素的数据类型必须都是同一类型

            1)定义格式:数据类型 数组名 [ ];

               一般使用这种格式 : 数据类型[ ] 数组名 = new 数据类型[ ]{元素1,元素2,元素3...};

                                                        //静态初始化:  指定数组中的元素的值,由系统给数组指定长度


                                               数据类型[ ] 数组名 = new 数据类型[ 指定长度];

                                                        //动态初始化,给定指定长度,由系统给数组中的元素赋值

                                   

 在以后过程中接触三个容器
              数组:缺点:长度固定
              StringBuffer:字符串缓冲区

               集合:Collection


定义两个数组的动态初始化

        

三个数组的动态初始化



                    2) 访问数组中的元素呢?

                             数组名称[索引] :  索引是从0开始

                             索引的最大值:通过数组长度-1 

                            直接输出数组名称:地址值

 
 * 注意:
            定义一个数组,不能动静集合
            数据类型[] 数组名称 = new 数据类型[3]{元素1,元素2,元素3....}  :错误的


****** 面试题:

数组中有没有length属性,String中有没有length属性,集合中有没有length属性
 
            数组:   length属性: 获取数组长度
            String:  没有length属性,而是length()获取字符串的长度
            集合中:  没有,但有size(): 获取集合的元素数

Java中的方法:

                    方法:    执行特定功能的独立的代码块!(有一个方法名)

定义方法格式:   

                1)有具体返回值的方法调用

                                        修饰符  返回值  方法名(形式参数列表…){

                                                        语句;

                                                         return  表达式;

                                        }

                                            修饰符:public static

                                            返回值:具体的数据类型

                                            有具体返回值的方法调用:    赋值调用

               2) 没有具体返回值的方法定义

                              定义格式:       举例:public static void main(String[] args){….}

                                       修饰符    void 方法名(形式参数列表){

                                                         没有返回值;

                                        }

                                没有具体返回值方法调用:     单独调用

定义方法的注意:

                          两个明确:

                                        1)     明确返回值类型

                                        2)     明确参数类型以及参数个数

                        定义方法的注意事项:

                                        1)     方法和方法之间是平级关系,可以在一个方法中调用另一个方法,但是不能再该方法中定义发方法

                                        2)     形式参数中,参数名携带数据类型,否则报错

                                        3)     在调用方法的时候,方法名(实际参数列表) ;实际参数不需要携带数据类型

                                        4)     public staticint sum(int a,int b);{…} :这种方法是没有方法体的方法 ,不能有分号;

                              局部变量:在方法中或者再方法声明上的变量

                              成员变量:类中方法外!(面向对象中:封装)

******* 面试题:
局部变量和成员变量的区别?
        1)在类中的位置不同
                局部变量:在方法中或者是方法声明上!
                成员变量:在类中方法外
        2)在内存中的位置不同
                局部变量:在栈内存中
                成员变量:在堆内存中
        3)生命周期:
                局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
                成员变量:随着类的加载而存在,随着类的加载完毕,等待gC回收
        4)初始化不同
                局部变量:不能不初始化,即使是声明一个局部变量,使用之前必须初始化,否则报错!
                成员变量:可以不用初始化值;
 

 如果成员变量名称和局部变量名称一致的情况下,采用就近原则!


   Java中的内存分配:

             栈内存 :   存储是局部变量 

                            特点:  (先进后出进栈的方式:压栈   出栈的方式:弹栈                队列

             堆内存:    里面存储的是new出来对象以及成员变量  

                            特点:     new出来的对象不会立即被Gc回收掉,而是等待GC空闲时刻回收不用对象或者没有更多引用的对象

             方法区:    class区域 // static区域 //  字符串常量池  //  缓冲区等等



 

 面向对象: 本身是一个基于面向过程的一个思想,



        面向过程:    C语言
        给定一个需求,分析--->代码实现--->加入使用方法等进行改进

        一步一步的完成,面向过程!


面对对象的设计特点:

        面向对象:    创建对象,使用对象,指挥对象 


面对思想的特点:
      
  1)面向对象的思想更符合我们生活中的思想行为习惯
        2)让一个复杂的事情简单化

        3)角色发生变化:让我们从执行者--->变成了指挥者


面对对象的特征:  封装,继承,多态


 封装:将类的成员变量私有化,只能在本类访问,不能被外界访问,就需要给成员变量提供公共的成员方法;


举例:

    买电脑
            面向过程:     网上参考电脑的一些配置--->电脑店购买---->砍价---->安装一些软件--->购买完成

            面向对象:      网上参考电脑的配置---->让懂行的电脑专家去购买---->购买回来


类:     它是用来描述现实世界中的事物!


学生事物 ----->Student类
                属性 :年龄,姓名,学号,性别 成员变量:类中方法外定义的变量 age,name,sID,gender
                行为 :学习,打游戏...等这些动作 成员方法:study(),playGame() ;

 事物------------------->(代码)类
              属性: 成员变量
              行为: 成员方法
 
类和对象的关系:
        事物--->代码 体现出  :类 ----->格式

        类名 对象名 = new 类名() ;


一个标准类的定义:

            1)私有化变量: 

                      被private修饰的成员变量/成员方法,只能在本类中访问,外界不能够直接访问

            2)提供有参或无参的构造方法;

                      (1)作用:给对象进行初始化;
      
                      (2)特点: (1)与方法名相同;
                                       (2)构造方法可重载;
                                       (3)当你没有自己重写构造函数时,系统会默认给你添加一个无参的构造函数;
                                         (4 )   没有具体的返回值,也没有返回值类型,连void也没有
                            
                     (3)注意事项: (1)方法名必须与类名相同;
                                             (2)一般用public修饰,没有返回值;
                                               (3)  当写一个标准类的时候,没有提供无参构造方法,系统默认会提供无参构造
                                               (4)  假设给出类有参构造,系统不会提供无参构造
                                      
                      (4)构造方法中不能写return语句,因为它没有返回值,也没有返回值的类型,void也没有
             

            3)提供一些公共的可供访问成员变量的方法 例 setName() / getName()


    关键字this: 代表当前对象的引用 

                当局部变量和成员变量名称相同时,为了防止局部变量隐藏成员变量,java就采用 this 区分   


 匿名对象:  没有名字对象
               实际开发中,在接口中,抽象类 中用的非常多
                格式    new 类名() ;


匿名对象的好处:
            1)一般,调用一次即可,不适合调用多次
            2)调用完毕之后,会立即从内存释放掉,及时被GC垃圾回收器回收掉!

            3)匿名对象它可以作为参数进行传递

 形式参数的问题:
            1)形式参数如果是基本数据类型: 形式参数的改变,对实际参数没有影响!
            2)形式参数是应用数据类型的话:  形式参的改变, 会直接影响实际参数
        结论:
                    如果一个方法的形式参数是一个引用数据类型:需要创建该引用类型的具体对象





























猜你喜欢

转载自blog.csdn.net/qq_42371269/article/details/80888130