A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

邸佩宁

初级黑马

  • 黑马币:17

  • 帖子:5

  • 精华:0

© 邸佩宁 初级黑马   /  2019-8-27 16:13  /  1813 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邸佩宁 于 2019-8-27 16:25 编辑

    基础语法
    定义变量:数据类型 变量名 = 变量值
    if...else...语句if (关系表达式){
​                                         语句体;}​                                                                                        else{
                                语句体;}   
三种循环格式:for循环,while循环,do while循环
1.for循环:for(初始化语句;条件判断语句;条件控制语句){循环体;}  



2.while循环:初始化语句;while(条件判断语句){循环体;条件控制语句;}
    执行流程跟for循环执行流程类似
3.do while循环:初始化语句;do{循环体;条件控制语句}while(条件判断语句)

三种循环的永真循环格式和区别格式:⑴for(;;){  循环体  }
​                ⑵while(true){  循环体  }
​                ⑶do{  循环体  }while(true)区别:
  • 三种循环的区别

    • for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
    • do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)

  • for循环和while的区别

    • 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
    • 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

switch语句格式
switch(表达式){case 值1:                          表达式类型:byte short char int jdk5.0以后支持枚举 jdk7.0以后支持String
​                                           语句体1;​                                                        
                                           break;​                  
                            case 值2:​                        
                                            语句体2;​                           
                                            break;​                     
                                             .....​            
                              default:​                  
                                          语句体n+1;}

逻辑运算符
& 【与】两个表达式的结果有false则falseb)
|【或】两个表达式的结果有true则truec)  
^【亦或】两个表达式的结果不同是为true否则为falsed)  
!【取反】
&&【短路与】当表达式左边的结果为false右边表达式就不执行了【有false则false】
||【短路或】当表达式左边的结果为true右边表达式就不执行了【有true则true】

数组定义格式分两种,动态初始化和静态初始化
动态初始化
        数据类型[] 变量名 = new 数据类型[数组长度];
​        int[] arr = new int[x];
​        左边:int  说明数组中的元素类型是int类型     右边: new  为数组申请内存空间
​                    []    说明这是一个数组                                          int   说明数组中的元素类型是int类型  
​                    arr  这是数字的名称                                                  [x]   数字长度,其实就是数组中的元素个数
​        数组在初始化时,会为存储空间添加默认值
​                        整数:默认值0
​                        浮点数:默认值0.0
​                        布尔:默认值false
​                        字符:默认值是空字符
​                        引用类型:默认值是null
静态初始化
数据类型[]  变量名称 = new 数据类型[]{数据1,数据2,…};
​简化格式                int[] arr =  {1,2,3,...};
数组的两种索引异常

Java中内存分配
​栈内存:存储局部变量(定义在方法中的变量,使用完毕,立即消失)
​堆内存:存储new出来的内容(实体,对象)【数组在初始化时,会为存储空间添加默认值,                                       
每一个new出来的东西都有一个地址值。使用完毕,会在垃圾回收器空闲时被回收】
方法
1.概述
是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
2.带参数方法定义和调用
  • 方法定义格式    public static void 方法名( 数据类型  变量名){... ...}               
    方法调用格式    方法名(参数);    方法名(变量名/常量值);                PS:多个参数也是用,隔开     
  • 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配        PS:方法名用小驼峰命名法、多个参数用  ,隔开、参数中的数据类型与变量名都不能缺少。
  • 形参与实参
    形参是方法定义中的参数等同于变量的定义格式有数据类型和变量名组成
    实参是方法调用中的参数要么是变量名要么是常量值
3.带返回值方法得定义和调用
  • 带返回值方法定义格式                public static 数据类型     方法名(参数){return数据;}  

        PS:方法定义时return后面的返回值必须与方法定义上的数据类型相匹配. 带返回值方法调用格式               
  • 数据类型  变量名 =  方法名(参数);     

      PS:方法的返回值要用一个变量来接收
4.方法的注意事项
  • 方法不能嵌套使用
  • void代表没有返回值类型的方法
  • a)定义方法时要做到两个明确,

    • 明确返回值类型:主要是明确方法操作完毕后是否有数据返回,如果没有,写void;如果有,写对应的数据类型
    • 明确参数:主要是明确参数的类型和数量

    b)调用方法时
    • void类型的方法,直接调用即可
    • 非void类型的方法,推荐用变量接收调用


5.方法重载
  • 多个方法在同一个类中
  • 多个方法具有相同的方法名
  • 多个方法参数列表不同,类型不同或类型顺序不同或者数量不同
  • 与返回值类型无关/与参数名称无关
  • 在调用的时候,Java虚拟机会通过参数的不用来区分同名的方法

6.方法的参数传递

1、对于基本类型数据的参数,形参的改变不影响实参的值

2、对于引用类型数据的参数,形参的改变影响实参的值


面向对象
1、概述
  • 类是对象的抽象,对象是类的实体

  • 类的重要性:类是java程序的基本组成单位
  • 类是什么:类是对现实生活中一类具有共同属性和行为的事物的抽象,确定对象将会拥有的属性和行为
  • 类的组成:属性和行为

    • 属性:在类中用过成员变量来体现(类中方法外的变量)
    • 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)

2、成员变量和局部变量的区别
  • 类中位置不同

    • 成员变量:类中方法外
    • 局部变量:方法内或者方法声明上(方法形参位置上)

  • 内存中的位置不同

    • 成员变量:堆内存
    • 局部变量:栈内存

  • 生命周期不同

    • 成员变量:因为在堆内存,所以随着对象的存在而存在,随着对象的消失而消失
    • 局部变量:因为在栈内存,所以随着方法的调用而存在,随着方法的调用完毕而消失

  • 初始化值不同

    • 成员变量:因为在堆内存,堆内存中的变量都有默认的初始化值
    • 局部变量:因为在栈内存,栈内存中的变量没有默认的初始化值,必须先定义赋值,才能使用

面向对象的三大特征:封装,继承和多态

1、封装:
  • 封装的概述

    • 是面向对象三大特征之一(封装、继承、多态)
    • 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的

  • 封装原则

    • 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量
    • 将成员变量用private修饰,然后提供对应的getXxx()/setXxx()方法

  • 封装的好处

    • 通过方法来控制成员变量的操作,提高了代码的安全性
    • 把代码用方法进行封装,提高了代码的复用性

private关键字
  • 是一个权限修饰符;可以修饰成员(成员变量和成员方法);作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问
  • 针对private修饰的成员变量,如果需要被其他类使用,提供相应的get/set方法
  • this关键字

    • this修饰的变量用于指代成员变量

      • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
      • 方法的形参没有与成员变量同名,不带this修饰的变量值的是成员变量

    • 什么时候使用this

      • 局部变量和成员变量重名的时候为了怕局部变量把成员变量隐藏了(解决局部变量隐藏成员变量)
      • this:代表所在类的对象引用  PS:方法被哪个对象调用,哪个方法里的this就代表哪个对象

    • 构造方法:构造方法是一种特殊的方法;作用就是创建对象
    • 注意事项

      • 当一个类中如果没有给出构造方法的时候系统会默认给一个无参构造方法,如果给出一个构造方法后系统将不再给出默认的构造方法如果想使用默认构造方法就必须手动写一个
      • 构造方法也可以重载
      • 推荐的使用方式

        • 无论是否使用,都建议手工书写一个无参构造方法

2、继承
  • 概述
    • 继承的格式
      • 格式:public class 子类名extends父类名{}
      • 例子:public clsaa Zi extends Fu{}
      • Fu:是父类,也被称为基类,超类
      • Zi:是子类,也被称为派生类

    • 继承中子类的特点:
      • 子类可以有父类的内容
      • 子类还可以有自己特有的内容


  • 继承的好处和弊端
    • 继承的好处
      • 提高了代码的复用性(多个类相同的成员可以放到同一个类中)
      • 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

    • 继承的弊端
      • 继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性

    • 什么时候使用继承?
      • 继承体现的关系 is a
      • 假设法:如果有两个类A和B,如果他们满足A是B的一种,或者B是A的一种,就说嘛他们存在继承关系,这个时候就可以考虑使用继承来实现,否则就不能滥用继承
      • 举例:苹果和水果(苹果是水果的一种),猫和动物(猫是动物的一种)  

    • 继承中的变量访问特点,super关键字
      • 子类方法中访问变量,子类局部范围--->子类成员范围--->父类成员范围        PS:如果都没有就报错(不考虑父亲的父亲...)  规律:就近原则,局部优先
      • super关键字的用法

  • 继承中构造方法的访问特点
    • 子类中所有的构造方法都会默认访问父类中的无参构造方法
      1、因为子类会继承父类中的数据,可能还会使用父类的数据。所有,子类初始化之前,一定要先完                  成父类数据的初始化
      2、每一个子类构造方法的第一条语句默认都是:super()
    • 如果父类中没有无参构造方法,只有带参构造方法
      1、通过使用super关键字去显示的调用父类的带参构造方法
      2、在父类中自己提供一个无参构造方法
      推荐:自己给出无参构造方法

  • 继承中成员方法的访问特点
    • 通过子类对象访问一个方法:子类成员范围--->父类成员范围  PS:如果都没有就报错(不考虑父亲的父亲...)

  • 方法重写
    • 方法重写的概述:子类中出现了和子类中一模一样的方法声明现象,这种现象就叫方法重写
    • 方法重写的应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
    • @Override
      1、是一个注解
      2、可以帮助我们检查重写方法的声明的正确性
    • 注意事项
      1、私有方法不能被重写(父类私有成员子类是不能继承的)
      2、子类方法访问权限不能更低(public>protected>默认>私有)

  • Java中继承的注意事项
    • java中类只支持单继承,不支持多继承
    • java中类支持多层继承,形成继承体系

3、多态
1、多态的概念
  • 同一段代码不同时刻表现出不同的执行形态

2、多态的前提
  • 继承
  • 方法的重写
  • 父类的引用指向子类的对象

3、多态中成员访问特点
  • 成员变量:编译看左边,执行也看左边  针对变量只能访问父类
  • 成员方法:编译看左边,执行看右边  

4、多态的优点和弊端
  • 优点:提高了程序的拓展性
  • 弊端:父类引用无法调用子类中特有的方法

5、多态中向上和向下转型
  • 向上转型:从父类到子类的转换   格式:父类  父类引用=new 子类()----->自动类型转化
  • 向下转型:从子类到父类的转换   格式:子类  子类引用=(子类)父类引用 ----->强制类型转化

异常
1、异常
  • 异常的概述:异常就是程序出现了不正常的情况
  • 异常的体系结构

2、JVM默认处理异常的方式
  • 如果程序出现了问题,我们没有做任何处理,最早JVM会做默认的处理,处理方式有两个步骤

    • 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
    • 程序停止执行


3、try-carch方式处理异常
  • 定义格式
    try{
        可能出现异常的代码;
    }catch(异常类名  变量名){
        异常处理代码;
    }
  • 执行流程

    • 程序从try里面的代码开始执行
    • 出现异常,就会跳转到对应的catch里面去执行
    • 执行完毕之后,程序还可以继续往下执行

  • 实例代码


public class ExceptionDemo01{
    public static void main(String[] args){
        System.out.println("开始");
        method();
        System.out.pringln("结束");
        
    }
    public static void method(){
        try{
            int[] arr = {1,2,3};
            System.out.println(arr[3]);
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("你访问的数组索引不存在,请重新输入正确的索引")
            e.printStackTrace();
        }
    }
}4、Throwable成员方法
  • 常用方法

    • public String getMessage()                返回此 throwable 的详细消息字符串
    • public String toString()    返回此可抛出的简短描述
    • public void printStackTrace()    把异常的错误信息输出在控制台  【常用的方法】


5、编译时异常和运行时异常的区别
  • 编译时异常

    • 都是Excrption类及其子类
    • 必须显示处理,否则程序就会发生错误,无法通过编译

  • 运行时异常

    • 都是RuntimeExcrption类及其子类
    • 无需显示处理,也可以和编译时异常一样处理


6、throws方式处理异常
  • 定义格式   public class 方法() throws 异常类名{    }
  • 注意事项

    • 这个throws格式是跟在方法的括号后面的
    • 编译时异常必须要进行处理,有两种处理方案:tyr...catch...或者throws,如果采用throws这个方案,将来谁调用谁处理
    • 运行时异常可以不处理,出现问题后,需要我们回来修改代码


7、throws和throw的区别


集合
  • 集合的概述:可变长度的数据容器
  • 体系结构

    • 单列集合:Collection

      • List:可存储重复的数据;主要学习ArrayLisst和LinkedList(两个实现类)
      • Set:不可存储重复的数据  主要学习SetList  、  HashList  、 TerrList(三个实现类)

    • 双列集合:Map   主要学习HashMap(一个实现类)




1、Collection的概述
  • 概述:是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素

    JDK不提供此接口的任何直接实现,它提供更多具体的子接口(Set和List)实现
2、创建Collection集合的对象和基本使用
  • 通过多态的方式创建对象;Collection<> c = new ArrayList<>();
  • 具体的实现类ArrayList  LinkedList  HashSet  TreeSet
  • 基本使用:添加数据方法:add();

  • Collection集合的常用方法

    • 从集合中移除指定的元素:remove(Object o)
    • 清除集合中的元素:clear()
    • 判断集合中是否存在指定元素:contains(Object o)
    • 判断集合是否为空:isEmpty()
    • 集合的长度,也就是集合中元素的个数:size()


3、Collection集合遍历
  • Collection集合遍历通过迭代器对象进行遍历
  • 步骤

    • 获取迭代器:集合.iterator()
    • 判断迭代器是否可以读取元素:hasNext()
    • 读取元素:迭代器.next()
      PS:迭代器是依赖于集合存在的

4、list集合的概述和特点
  • List集合概述

    • 有序集合(也成为序列),用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素

  • List集合特点

    • 有索引
    • 可存储重复元素
    • 元素存取有序

  • List集合的特有方法
    [td]
    方法名
    描述
    add(index,"")在此集合中的指定位置插入指定的元素
    set(index , "")替换集合中的指定位置的元素
    remove(index)删除集合中的指定索引位置的元素
    get(index)获取集合中指定索引位置的元素

5、集合并发问题及ListIterator用法
  • 异常:当通过迭代器对象迭代集合对象时,向集合对象添加数据
  • 如何解决

    • 用for循环取代迭代器
    • 通过ListIterator取代Iterator

      • ListIterator介绍:        

        • 用过List集合的listIterator()方法得到,特殊List集合特有的迭代器
        • 用于运行程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

  • ListIterator的基本方法:
    [td]
    方法
    描述
    hasPrevions()判断是有有上一个元素
    previons()取出上一个元素
    add()想集合中添加元素
    remove()删除集合中的元素

6、增强for循环
格式:for(变量的类型  变量名 : 数字或集合){                        }







更多图片 小图 大图
组图打开中,请稍候......

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马