首页 > 编程语言 >Java基础

Java基础

时间:2022-11-22 11:11:52浏览次数:57  
标签:Java 子类 基础 数组 类型 new 父类 方法

Java基础

环境准备

  • 安装JDK

  • 配置环境变量

  • 安装开发工具(IDEA)IDEA

    • IDE(集成开发环境,是用于提供程序开发环境的应用程序)

    • IDEA,开发Java代码

    • WebStorm,开发前端代码

    • DataGrip,数据库连接

     

基础语法

  • 注释

    • 当行注释

    • //单行注释
    • 多行注释

    • /* 
      多行注释
      */
    • 文档注释

      /**
      *@auther
      *@date
      @version
      **/

      百度>有趣的代码注释

                                      _(\_/) 
                                    ,((((^`\
                                  (((( (6 \
                                ,((((( ,    \
            ,,,_             ,(((((  /"._ ,`,
            ((((\\ ,...       ,((((   /    `-.-'
            ))) ;'   `"'"'""((((   (      
          (((  /           (((      \
            )) |                      |
          ((  |       .       '     |
          ))  \     _ '     `t   ,.')
          (   |   y;- -,-""'"-.\   \/  
          )   / ./ ) /         `\  \
              |./   ( (           / /'
              ||     \\          //'|
              ||      \\       _//'||
              ||       ))     |_/  ||
              \_\     |_/          ||
              `'"                 \_\
                                   `'"

标识符

  • 关键字

    image-20220901152629545

  • 所有标识符都应该以字母(A-Z或者a-z),美元符($),下划线(_)

  • 标识符是大小写敏感的

数据类型

  • 强类型语言(Java)

    • 要求变量的使用要严格负荷规定,所有变量都必须先定义后才能使用。

  • 弱类型语言

  • Java的数据类型分为两大类

    • 基本类型(primitive type)-八大基本数据类型

      • 数值类型

        • 整数类型

          • byte占1个字节范围:-128~127

          • short占2个字节范围:-32768~32767

          • int占4个字节范围:-21亿~21亿

          • long占8个字节

        • 浮点类型

          • float占4个字节

          • double占8个字节

        • 字符类型

          • char占2个字节

      • boolean类型

        • 占1位(值只有true和false)

    • 引用类型(reference type)

  • 存储单位

    image-20220901160130540

 

类型转换

image-20220902105340670

变量

简述

变量就是可以变化的量。

Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。

type varName [=value] [{,varName=[value]}]

类变量

实例变量

局部变量

命名规范

所有变量、方法、类名:见名知意

类成员变量:首字母小写和驼峰原则:monthSalary

局部变量:首字母小写和驼峰原则

常量:大写字母和下划线原则:MONTH_SALARY

方法名:首字母小写和驼峰原则:run

运算符

算数运算符:+,-,*,/,%,++,--

复制运算符:=

关系运算符:>,<,>=,<=,==,!=instanceof

逻辑运算符:&&,||,! 与,或,非

位运算符:&,|,^,~,>>,<<,>>>

条件运算符:?,:

扩展复制运算符:+=,-=,*=,/=

优先级:()

 

    A = 0011 1100
   B = 0000 1101
------------------------
   A&B = 0000 1100
   A|B = 0011 1101
   A^B = 0011 1101
   ~B = 1111 0010

   2*8 = 16
   2*2*2*2
   << 左移   *2
   >> 右移   /2

   0000 0000 0
   0000 0001 1
   0000 0010 2
   0000 0011 3
   0000 0100 4
   0000 0101 5
   0000 1000 8
   0001 0000 16

 

 

Java流程控制

用户交互Scanner

image-20220905142024460

 

image-20220905143141138

 

顺序结构

选择结构

循环结构

break & continue

 

Java方法

什么是方法

  • Java方法是语句的集合,它们在一起执行一个功能

    • 方法是解决一类问题的步骤的有序组合

    • 方法包含于类或对象中

    • 方法在程序中被创建,在其他地方被引用

  • 设计方法的原则

    方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于后期的扩展

  • 方法的命名规则

    驼峰

 

方法的定义

  • Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:

  • 方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

    • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了方法的访问类型。

    • 返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。

    • 方法名:是方法的实际名称。

    • 参数类型:参数像是一个占位符。当方法被调用是,传递值给方法。参数是可选的

      • 形式参数:用来定义作用的参数

      • 实参:实际调用传递的参数

    • 方法体:方法体包含具体的语句,定义该方法的功能。

    image-20220909103454497

     

方法的重载

  • 重载就是在一个类中,有相同的方法名,但是参数不同。

  • 方法的重载规则:

    • 方法名必须相同

    • 参数列表必须不通(个数不用,或类型不同、参数顺序不同等)

    • 方法的返回值可以相同也可以不相同

    • 仅仅返回值类型不同不足以成为方法的重载

  • 实现理论

    方法名称相同时,编译器会根据调用方法的参数个数,参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。

命令行传参

  • javac 编译

  • 命令行中需切换到包的路径下

    java wx.method.Demo3 参数...

可变参数

  • JDK1.5开始,Java支持传递同类型的可变参数给一个方法

  • 在方法声明中,在指定参数类型后加一个省略号(...)

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通参数都必须在它之前声明

       public static void main(String[] args) {
          test(1,2,3,4,5,56,6,7);
          test(new int[]{9,8,7,6,56});
      }

      public static void test(int...a){
          for (int i = 0; i < a.length; i++) {
              System.out.println(a[i]);
          }
      }

 

递归

  • A方法调用B方法

  • 递归就是A方法调用自己

  • 利用递归可以用简单的程序来解决一些复杂的问题。

  • 递归结构包括两个部分

    • 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环

    • 递归体:什么时候需要调用自身方法

image-20220909111902868

数组

数组的概念

  • 数组是相同类型数据的有序集合

  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成

  • 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问

数组声明创建

  • 首先必须声明数组变量,才能在程序中使用数组。

    dataType[] arrayName;//首选
    dataType arrayName[];//效果相同,不是首选方法

     

  • Java语言使用new操作符来创建数组

    dataTpe[] arrayName = new dataType[size];

     

  • 数组的元素是通过索引访问的,数组索引从0开始

  • 获取数组的长度

    arrays.length

  • 三种初始化

    • 静态初始化

      int[] a = {1,2,3};
      Man[] mans = {new Man(1,1),new Man(2,2)};

       

    • 动态初始化

      int[] a = new int[2];
      a[0] = 1;
      a[1] = 2;

       

    • 数组的默认初始化

      数组是引用类型,它的元素相当于类的实例变量吗,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

       

数组使用

  • For-Each循环

    public static void main(String[] args) {
    int[] a = {1,2,3,4,5};
    //打印全部的数组原色
    for (int i : a) {
    System.out.println(i);
    }
    }

     

  • 数组作方法入参

  • 数组作返回值

多维数组

  • 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。

  • 二维数组

    int a[][] = new int[2][5];

     

Arrays类

  • 数组的工具类java.util.Arrays

  • 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用

  • 查看JDK帮助文档

  • Arrays类中的方法都是static修饰的静态方法

  • 具有以下常用功能

    • 给数组赋值:通过fill方法

    • 对数组排序:通过sort方法,按升序

    • 比较数组:通过equals方法比较数组中元素值是否相等

    • 查找数组元素:通过binartSearch方法能对排序好的数组进行二分查找法操作

冒泡排序

  • 冒泡排序无疑是最出名的排序算法之一,总共有八大排序。

  • 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层一次比较。

  • 这个算法的时间复杂度为O(n2)

 

稀疏数组

image-20220909150827318

  • 当一个数组中大部分元素为0,或者为同意值的数组时,可以使用稀疏数组来保存该数组。

  • 稀疏数组的处理方式是:

    • 记录数组一共有几行几列,有多少不同值

    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

  • 如下图:左边是原始数组,右边是稀疏数组

    image-20220909150612445

数据结构

Java内存

image-20220909132726309

向对象编程

面向对象

  • 面向过程

    • 步骤清晰简单,第一步做什么,第二部做什么...

    • 面对过程适合处理一些较为简单的问题

  • 面向对象

    • 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。

    • 面向对象适合处理复杂的问题,适合处理需要多人协作的问题

  • 对于描述复杂的事务,为了从宏观上把我,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。

  • 面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据 。

  • 抽象

  • 三大特性

    • 封装

    • 集成

    • 多态

  • 从认识伦角度考虑是先有对象后有类。对象,是具体的事务。类,是抽象的,是对对象的抽象。

  • 从代码的运行角度考虑是先有类后有对象。类是对象的模板。

方法

  • 方法的定义

    • 修饰符

    • 返回类型

    • break:结束当前循环和;return:表示方法结束;continue:表示调出当前。

    • 方法名:注意规范

    • 参数列表:(参数类型,参数名)

    • 异常抛出

  • 方法的调用

    • 静态方法

    • 非静态方法

    • 形参和实参

    • 值传递和引用传递

    • this关键字

对象的创建

  • 使用new关键字创建

  • 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。

  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有两个特点:

    • 必须和类的名字相同

    • 必须没有返回值类型,也不能写void

    构造器:

1、和类名相同

2、没有返回值

作用:

1、new本质在调用构造方法

2、初始化对象的值

注意点:

1、定义有参构造之后,如果想使用无参构造,需要显示的定义一个无参构造

image-20220913110515111

  1. 类与对象

    类是一个模板:抽象,对象是一个具体的实例

  2. 方法

    定义,调用

  3. 对象的引用

    引用类型:基本类型(8大基本类型)

    对象是通过引用来操作的:栈--->堆

  4. 属性:字段Field成员变量

    默认初始化:

    数字:0 0.0

    char: u0000

    boolean:false

    引用:null

    修饰符 属性类型 属性名 = 属性值

  5. 对象的创建和使用

    必须使用new关键字创建对象,构造器 Person person = new Person();

    对象的属性 person.name

    对象的方法 person.sleep();

  6. 类:

    静态的属性 属性

    动态的行为 方法

    封装、继承、多态

面向对象三大特性

  • 封装

    • 该露的露,该藏得藏

      程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

    • 封装(数据的隐藏)

      通常,应禁止直接访问一个对象中的数据的实际标识,而是通过操作接口来访问,这称为信息隐藏

    • 属性私有,get/set

    1. 提供程序的安全性,保护数据

    2. 隐藏代码的实现细节

    3. 统一接口

    4. 系统可维护性增加

     

  • 继承

    • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模

    • extands的意思是“扩展”。子类是父类的扩展

    • JAVA中类只有单继承,没有多继承

    • 继承是类和类之间的一种关系。初次之外,类和类之间的关系还有依赖、组合、聚合等。

    • 继承关系的两个类,一个为子类(派生类),一个为父类(基类)、子类继承父类,使用extands关键字来表示。

    • 子类和父类之间,从意义上讲应该具有“is a”的关系

    • object类

    • super-this

      1. super调用父类的构造方法,必须在构造方法第一个

      2. super必须只能出现在子类的方法或者构造方法中

      3. super和this不能同时调用构造方法

        super VS this

      • 代表的对象不用:

        • this:本身调用者这个对象

        • super:代表父类对象的引用

      • 前提:

        • this:没有继承也可以使用

        • super:只能在继承条件下使用

      • 构造方法:

        • this();本类的构造

        • super();父类的构造

    • 方法重写

      • 需要有继承关系,子类重写父类的方法

      • 方法名必须相同

      • 参数列表必须相同

      • 修饰符:范围可以扩大,单不能缩小:public>protected>default>private

      • 抛出的异常:范围可以被缩小,但不能扩大;ClassNotFountException-->Exception(大)

      • 重写,子类的方法和父类必须要一致;方法体不同

      • 为什么需要重写

        1. 父类的功能,子类不一定需要或者不一定需

        2. Alt + Insert : override

  • 多态

    • 动态编译:类型,可扩展

    • 即统一方法可以根据发送对象的不同而采用多种不同的行为方式。

    • 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多

    • 多态存在的条件

      • 有继承关系

      • 子类重写父类的方法

      • 父类引用指向子类对象

    • 多态是方法的多态,属性没有多态性

    • instanceof 类型转换 > 引用类型

    多态注意事项:

    1. 多态是方法的多态,属性没有多态
    1. 父类和子类,有联系
    1. 存在的条件:继承关系,方法需要重写,父类引用指向子类对象。Father f = new Son();
    • 父类引用指向子类的对象

    • 把子类转换为父类,向上转型

    • 把父类转换为子类,向下转型,强制转换

    • 方便方法的调用,减少重复的代码

     

抽象类和接口

抽象类

  • abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。

  • 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。

  • 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的

  • 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的

  • 子类继承抽象类,那么久必须要实现抽象类没有实现的抽象方法,否则该子类也需要声明为抽象类

    1.不嫩new这个抽象类,只能靠子类去实现它;约束
    2.抽象类中可以写普通方法
    3.抽象方法必须在抽象类中

     

接口(interface)

  • 普通类:只有具体实现

  • 抽象类:具体实现和规范(抽象方法)都有

  • 接口:只有规范

  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...则必须能...”的思想。如果你是汽车,则必须能跑

  • 接口的本是是契约,就像我们人间的法律一样。指定好后大家遵守

  • OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式只针对具备了抽象能力的语言(比如c++,java,c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

作用:

	1. 约束
1. 定义一些方法,让不同的人实现
1. 方法都是public abstract的修饰的
1. 常量都是public static final修饰的
1. 接口不能被实例化,接口没有构造方法
1. implements可以实现多个接口
1. 必须要重写接口中的方法

内部类及OOP

  • 内部类就是在一个类的内部再定义一个类,比如A类中定义一个B类,那么B类相对A类来说就成为内部类,而A类相对B类来说就是外部类了

  • 成员内部类

  • 静态内部类

  • 局部内部类

  • 匿名内部类

 

异常

image-20220914141357282

 

  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译是不能被简单的忽略

  • 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以再编译时被忽略

  • 错误(ERROR):错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,他们在编译时也检查不到。

 

  1. 抛出异常

  2. 捕获异常

  3. 异常处理五个关键字

    try、catch、finally、throw、throws

//Ctrl + Alt + T
try {

} catch (Exception e) {
//打印错误的栈信息
e.printStackTrace();
} finally {

}

自定义异常

image-20220914144409352

image-20220914145551561

集合

image-20220914161218647

image-20220914161302996

 

IO流

 

image-20220914161057894

 

image-20220914161354315

 

标签:Java,子类,基础,数组,类型,new,父类,方法
From: https://www.cnblogs.com/wx-36/p/16914488.html

相关文章

  • day05_狂神说java基础_流程控制
    d05Java流程控制(p33-p44)1.用户交互Scanner之前的基本语法中没有涉及到程序和人的交互,java.util.Scanner是Java5提供的工具类,可以通过Scanner类获取用户的输入。......
  • java mybatis查询数据库获取树形结构数据
    数据库数据,每条数据都有code和parent_code,最顶级的parent_code为1实体类importcom.baomidou.mybatisplus.annotation.FieldFill;importcom.baomidou.mybatispl......
  • Java简单取反操作
    通过取反可以制作简单的文件加密处理器。示例:publicstaticvoidmain(String[]args)throwsException{inti=3;//取反,并且转为字符串......
  • 机器学习基础(4)—— 模型选择之评估方法
    参考:西瓜书第二章李航《统计学习方法(第二版)》第一章现实任务中,往往有多种学习方法可供选择,对于同一个方法,使用不同的参数配置,也可以产生不同的模型。选择哪个模型(算法)、......
  • 用 python 和 java 实现线性代数计算(1)—— 矩阵基本操作
    参考:《机器学习算法框架实战:Java和Python实现》python实现主要是调用NumPy库做的;java实现基本没有调库文章目录​​1.说明​​​​1.1程序组织​​​​1.2数据结构​​......
  • JavaWeb课程上用到的方法-11.22
    PrintWriterwriter=resp.getWriter();//响应流StringcontextPath=req.getContextPath();//返回站点根目录resp.sendRedirect(contextPath);//重定向Enumeration<S......
  • typescript 基础数据类型
    typescript入门介绍开始阶段推荐使用线上[Playground]https://www.typescriptlang.org/play基础数据类型布尔值letisDone:boolean=falselethasDone:boolean......
  • Typescript ----基础类型
    typescript入门介绍开始阶段推荐使用线上[Playground]https://www.typescriptlang.org/play基础数据类型布尔值letisDone:boolean=falselethasDone:boolean......
  • Java设计模式 - 24种
    设计模式的七大原则   开闭原则:对扩展开放、对修改关闭。   单一指责原则:一个类只做一件事。   依赖倒转原则:类似于ioc,采用接口编程。   迪米特原则:高内聚......
  • Java中的Iterator迭代器详解
    ......