java基础知识总结(二)

if.....else.....和三元运算符的区别

共同点:都是针对两种情况进行判断,都有表达式;

不同点:if....else....流程控制句,范围很大,不仅仅可以操作数据值,还可以操作输出语句去完成逻辑判断,而三元运算符仅仅是运算符,操作两个具体的数据值;

三元能实现的一定能使用if...else...流程语句

if...else...流程语句实现的,不一定能够使用三元!

(流程控制语句操作  System.out.println())

 流程控制语句之Switch

选择结构之Switch 的格式

switch(变量名){

case 值1;

语句1;

break;

case值2 ;

语句2 ;

break;

...

...

...

default;

语句n;

break;

}

执行流程:switch后面的变量需要和case进行匹配,case值1:成立,执行语句1;遇到break,语句结束;如果不匹配,继续执行case值2:成立,执行语句2,break结束

switch语句后面的这个变量名可以是什么样的数据类型?

本身能够跟的基本数据类型:byte,short,char,int

jdk5以后可以是枚举(引用类型)enum

jdk7以后可以跟string类型

switch语句中的注意事项:

1)case语句的后面之间只能是常量(在java语言中:强类型语言:语法结构很严谨)

而前端JavaScript里面的switch语句的case可以是常量,变量;

2)在case语句里面,如果一旦匹配成功,一定书写break;否则会造成case穿透,case匹配成功了,就会执行里面的语句,遇见break语句结束;

3)switch中的dafult语句可以在语句的任何位置,不影响语句的执行流程正常的格式,在语句末尾,break可以省略的;如果在语句中,break带上,否则case穿透了(考点)

4)switch语句的结束条件:

第一种情况:就是语句break结束;case语句后面的break或者default语句的breank

第二种情况:就是语句默认执行到末尾结束;

 循环结构语句

循环结构语句:

当需求中有这种循环的思想,就需要使用循环语句去实现;

for循环格式

for(初始化语句;条件表达式;控制体语句){

                //实际开发中,此处需要去完成一些逻辑判断

               循环语句体;

}

执行流程:

1)初始化语句,对变量需要赋值,

2)条件判断结果是否成立,成立,则执行循环体语句,进行控制体语句++或者--

3)继续判断条件表达式是否成立,成立,继续上面的这种操作...

''''

''''

如果控制体语句造成了条件表达式不成立,语句结束!

 求和思想(求和思想和求阶乘思想是一样的)

 需求:

1)在控制台上输出1-10的数据

2)求1-10之间的和

public static void main (String [] args){
    //定义变量的范围从一开始小于等于10
        for(int x = 1;x <=10 ; x++){
    //输出变量
        System.out.println(x);
        }
        int num = 0;//给最终变量定义初始值
        //明确范围
        for(x=1;x<=10;x++){
        //输出求和
        sum = sum + x;
        }
        //输出sum 
        Stystem.out.println(sum);
    }

    水仙花数

水仙花是一个三位数,特点就是每个位上的立方之和的结果就是当前数据本身

    1)明确范围三位数,使用for   初始化语句:变量x
    2)确定了范围,如何获取每个位的数据呢,个位,百位,十位?(关键)
    
        2.1)定义三个变量 int ge,int shi ,int bai
        
         个位数据 = 就使用x%10 ;
        十位上的数据 = x /10 %10 ;
        百位上的数据 = x/10 /10 %10;
        
        2.2)完成逻辑判断  
          满足条件:如果x的值 == (ge*ge*ge+shi*shi*shi+bai*bai* bai)
        
        2.3)输出这个x值,即可

    统计思想


    for-while的区别

while循环扩展格式

初始化语句;

while(条件表达式){

循环体语句;

控制体语句

}

执行流程:

1)初始化语句进行变量赋值,执行一次;

2)判断条件表达式是否成立,成立,执行循环体语句,依次执行控制语句;

3)再回到2)进行操作

...

...

当条件表达式不成立时,while循环结束;

区别:

    1)从用法格式上看,格式不同,while循环的这个格式,不要忽略了控制体语句;
        for(初始化语句;条件表达式;控制体语句){
            循环体语句;
        }        
        初始化语句;
        while(条件表达式){
            循环体语句;
            控制体语句;
        }
    2)是否明确循环次数(开发中,优先使用for)
        如果需求明确了循环次数,优先使用for循环,工程上的for循环使用最多的!
        (最频繁的)
        如果不明确循环次数,使用while循环
3)从内存角度考虑,for循环更优一些,比较节省内存空间    
        从for循环本身的格式上来说,for循环结束,里面的局部变量(方法定义中的变量)
        就被及时的释放空间!
        
        while循环格式,结束之后,依然能够去访问那个变量,(比较消耗内存空间)
        所以相对来说whle循环没有for循环好

do-while循环的格式

    初始化语句;
do{
    循环体语句;
    控制体语句;
}while(条件表达式) ;

初始化语句赋值
判断条件,成立,执行循环体,控制体语句,再次判断....

特点:
    和for,while最大的区别就是:即使条件不成立,循环体至少执行一次!

开发中 do-while很少,一般也就是jdk提供的类的源码中会见到!


    for和while死循环格式(使用while(true)居多

两种死循环格式:

for(;;){

循环体语句;

}

while(true){        //推荐这个格式
            循环体语句;
        }
        
死循环的格式最终里面完成某个逻辑,当达到某种条件结束循环

会用到一个跳转控制语句 break(中断,结束) ; 不能单独用,它使用在循环语句以及switch语句中;


    跳转语句

break;

  • break:结束,中断,不能单独使用!

  • 一般在循环语句(loop),或者是switch语句中用,不能超过这个范围去使用; *

  • for循环嵌套中也可以使用break *

  • break 标签名称; 在多层循环嵌套的时候,标签名称就是给循环语句前面加上的标签名字(以前的早期用法)


continue;

  • continue 结束当前循环,立即进入下一次 循环! (不能单独用,在循环中用) *

  • 应用:

  • 通过JavaSE网络编程,多线程,集合,io流---网络聊天室


return;  它和Java中的方法有关系 ,引入Java中的方法(函数)的一种概念

  • return:是在Java中跟定义方法相关的,跟有返回值类型的方法有关 *

  • 它结束有返回值类型的方法去使用的,一般很少单独用(可以用,不建议) * *

  • return实际开发中,和方法息息相关

java中方法的定义和调用
 

什么是Java中的方法(函数)?

  • 固定格式:

  • 方式1:有返回值类型的方法定义(在需求中需要根据实际场景需要返回值类型:数据类型)

  • 权限修饰符 static 返回值类型 方法名(参数类型1 参数名称1,参数类型2 参数名称2....){

  • //完成的方法逻辑操作

  • return 结果;

  • } *

  • 解释:

  • 权限修饰符 :目前 public 公共,公开的,访问权限足够大

  • static: 这周面向对象中讲 (必须先加上)

  • 返回值类型:现在数据类型(这几天:使用的基本数据类型,以后就是引用类型)

  • 方法名:满足标识符的规则-->方法名需要满足"小驼峰命名法")

  • 参数类型:就是数据类型(这几天:使用的基本数据类型,以后就是引用类型)

  • 参数名称:就是形式参数(变量名)

  • return:关键字 :这个方法结束,带回结果,谁调用,给谁! (返回结果--->最终 后期交给前端(JavaEE技术)) *

  • 方式1-有具体返回值的方法的调用

  • 1)单独调用

  • 2)输出调用

  • 3)赋值调用 *

  • 定义方法的注意事项:

  • 1)方法和方法是平级关系,不能在一个方法中去定义另一个方法!

  • 2)定义方法的时候,返回值类型需要最终和return语句的结果类型一致,否则报错!

  • 3)有左{ 大括号的地方不能有分号,有分号的地方不能出现"{"

  • 4)定义方法的时候,形式参数类型必须带上,

  • Java语言强类型语言(语法结构很严谨,不像Javascript,定义函数的时候,不需要写参数类型) *

  • 5)调用方法的时候,实际参数要么定义要么键盘录入的,不需要在调用方法里面再去书写数据类型了

  • 没有具体返回值类型的方法定义

  • 前面固定写法 *

  • 正常的格式:

  • public static 返回值类型 方法名(形式参数类型1 参数名1,.....){

  • 里面直接完成了输出操作或者一些其他逻辑,

  • 没有return关键字

  • System.out.println("xxxx") ;

  • }

方法重载

方法重载Overload:方法名相同,参数列表不同,与返回值无关,称为"方法重载"
                        参数列表不同:
                                1)参数个数不同
                                2)参数类型
                                3)或者参数类型的先后顺序
方法重载的目的:为了提供这个方法的扩展性,同一个方法可以传递不同的类型,完成具体逻辑操作;
jdk提供很多工具类都是有方法重载,Math类提供 方法abs(int/long/float/double):求绝对值

Jvm内存分配

栈,堆,方法区,本地方法区(和系统相关),寄存器(和系统相关)

数组定义以及以及创建数组进行初始化的格式

数组是一个容器,这个容器能够存储同一种类型的多个元素!

如何定义一个数组?

Java规定有一种固定的格式

数据类型[] 数组名称 ;

数据类型 数组名称[] ;

//举例:int[] arr; 定义一个int类型对数组arr变量int arr[] ;

定义一个int类型arr数组 *

  • 创建数组---->对数组进行初始化(创建数组对象)----两种方式

  • 1)动态初始化

  • 2)静态初始化 * *

  • 1)动态初始化:程序员你自己 给定数组长度,系统去默认分配的元素值

  • 数据类型[] 数组名称 = new 数据类型[数组长度];

  • 或者 数据类型 数组名称[] = new 数据类型[数组长度] ;

  • 创建数组的静态初始化的格式 *

  • 指定数组的元素,长度由系统给定

  • 本身的格式

  • 数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3...}; 推荐这个

  • 或者

  • 数据类型 数组名称[] = new 数据类型[]{元素1,元素2,元素3...}; *

  • 简写格式

  • 数据类型[] 数组名称 = {元素1,元素2,元素3...};

  • 或者

  • 数据类型 数组名称[] = {元素1,元素2,元素3...};

  •  注意不能动静结合!

  • 冒泡排序的思想:
     *      两两比较,将较大的值往后放,第一次比较完毕,最大值就出现在最大索引处
     *   依次这样比较,可以得到一个排好序的数组;
     *      规律:
     *              1)两两比较,较大的值往后放
     *              2)第一次有0个不比,
     *                  第二次有1个不比
     *                  第三次有2个不比
     *                  ...
     *                比较的次数:数组长度-1次

冒泡排序

  • 冒泡排序的思想:

  • 两两比较,将较大的值往后放,第一次比较完毕,最大值就出现在最大索引处

  • 依次这样比较,可以得到一个排好序的数组;

  • 规律:

  • 1)两两比较,较大的值往后放

  • 2)第一次有0个不比,

  • 第二次有1个不比

  • 第三次有2个不比

  • ...

  • 比较的次数:数组长度-1次

jvm内存分配有哪些?分别作用

栈内存:
    存储局部变量(在方法定义中或者方法声明上),局部变量跟方法有关的;方法进栈,方法调用完毕,里面局部变量随着调用结束而消失

堆内存:
    new出来的东西(引用数据类型)存储在堆中,而且它是随着对象的创建完毕,产生堆内存空间地址值!
方法区:
    里面很多的区域:class字节码文件区域---存储字节码文件---jvm需要加载这个类,解析这个类所有的方法以及变量(---这个过程"反射技术")
                static区域:----静态区域--存储跟static相关的一些方法以及变量等等
                constant pooll:常量池  里面存储常量相关的
                
本地方法区(了解): 和系统相关的----->创建系统资源完成系统相关的操作
寄存器(了解):   和系统cpu都有关系:电脑的核数(16核/8核的)--核数越大,高并发场景下,运行效率越高;

 面向对象的思想特点是什么?

 面向对象的思想特点:
    1)更符合现实生活中的思想行为习惯
    2)让复杂的事情简单化
    3)角色发生了改变:从执行者(面向过程)--->变成指挥者(面向对象)

 面向对象的设计理念和面向对象的三大特征

 面向对象的设计理念:
    不断的创建对象,使用对象,指挥对象做事情!(面对对象的宗旨)
    一直用的Scanner:键盘录入
        Scanner sc = new Scanner(System.in) ;
        //sc.nextInt() ;  sc.nextLine();
        sc.nextBoolean();

面向对象的三大特征:封装,继承,多态(面向对象重点)

什么是类?

类:是Java语言中最基本的单元;能够描述现实世界事物的一组事物的属性和行为的集合!
类和现实世界事物是一一对应的关系;

什么是对象 ?

对象:描述现实世界的具体事物!(具体事物的具体的属性和行为)

成员变量和局部变量的区别?

1)类中书写位置不同
    局部变量:方法定义中或者方法声明上
    成员变量:类中,方法外
2)内存位置不同
    局部变量:在栈内存中(跟方法相关)
    成员变量:在堆内存中(跟对象相关)
3)生命周期不同:
    局部变量:随着方法调用而存在,随着方法调用结束而消失
    成员变量:随着对象的创建而存在,随着对象的创建完毕,使用完毕对象(调用方法/访问成员变量),等待GC回收(不是立即释放内存空间)
4)初始化值不同
    局部变量: 要么直接定义并初始化 /要么就是先定义,使用之前初始化!(使用之前必须给初始化值,否则报错)
    成员变量:存在系统默认初始化,也可以直接显示初始化(不推荐直接显示初始化)

形式参数: 基本数据类型和引用类型

基本类型:传什么类型,实际参数给对应类型的值;

重点: 引用类型 ----- 如果形式参数是具体类型----->实际参数如何传递?

 匿名对象(没有名字的对象)

描述具体事物---java代码 体现  
类名 对象名 = new 类名() ;
new 类名().成员变量=赋值;
new 类名().成员方法 ;

 关于封装的概念

  • private :私有的 ,修饰的成员变量或者成员方法只能本类中访问  (为了保证数据安全)

  • private关键字的特点

  • 可以修饰成员变量/成员方法,只能在当前类中访问,外界类不能直接访问;

  • 但是,可以间接的通过公共的方法访问

this关键字

this的含义: 代表当前类对象的地址值引用
加入this---->标准类的写法    (描述学生事物/描述手机事物)  

JavaBean规范:
    1)类是具体类  class 类名{}
    2)类的属性必须私有化
    3)类中必须提供setXXX()/getXXX()  对成员变量的公共的访问方法(赋值/获取值)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值