JAVA基础

JAVA

跨平台

是指java虚拟机(JVM),在不同的操作系统上安装jvm,然后程序运行在JVM

JRE和JDK

JRE:是JAVA运行时环境,包括其JVM和运行时所需要的核心类库
JDK:是JAVA程序开发工具包,包含JRE和开发人员使用的工具

JAVA

  • 编译型
  • 解释型

JAVA基础_第1张图片

注释

  • 单行注释
    //
  • 多行注释
    /**/
  • 文档注释(javaDoc)
    /**
    /

标识符&关键字

  • 标识符
  • 关键字

数据类型

要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用

两大分类

  • 基本类型
  • 引用类型
    JAVA基础_第2张图片

什么是字节

  • 位:是计算机内部存储的最小单位
  • 字节:是计算机总数据处理的基本单位,习惯上有大写B表示
  • 1B(byte,字节)=8bit(位)

进制

1bit表示1位
1B=8b 表示一个字节
1024B=1KB
1024KB=1M
1024M=1G

浮点数

浮点数是有点的离散,存在舍入误差。接近但不等于。
解决:Bigdecimal 类

字符型

所有的字符本质就是数字,涉及到Uniconde编码表

类型转换

低--------------------------------------------------高
byte->short>char->int>long->float->double(小数优先级高于整数)
在运算中不同的数据类型要先转成统一的数据类型

自动类型转换&强制类型转换

自动类型转换:低->高
int类型以下的运算其结果为int类型
int类型以上存在最高什么类型结果就为什么类型
强制类型转换:高->低

转换问题

  1. 不能对布尔值进行转换
  2. 不能把对象类型转换为不想干类型
  3. 强制转换可能存在内存溢出或者精度丢失问题

变量

变量是什么:就是可以变化的量
Java是一种强类型语言,每个变量都必须声明其类型
Java变量是程序中最进本的存储单元,其要素包括变量名,变量类型和作用域
注意事项:

  1. 每个变量都有类型,类型可以是基本类型,也可以是引用类型
  2. 变量名必须是合法的标识符
  3. 变量声明是一条完整的语句,因此每一个声明都必须以分号结束

常量

常量:初始化之后不可在改变的值。在被设定后,在程序运行中不可在改变。
关键字:final 常量名=值 (常量名为大写字符)

运算符

JAVA基础_第3张图片

包机制

为了更好的组织类,Java提供了宝鸡至,用于区别类名的命名空间
一般李永公司域名倒置作为包名
package
为了使用包类的某个成员,我们需要在Java程序中明确导入包
import

顺序结构

Java的基本结构就是顺序结构,除非特别指明,否则就按顺序一句一句执行
顺序结构是最简单的算法结构,它是任何一个算法都离不开的基本算法结构

if选择结构

  1. if单选择结构
    JAVA基础_第4张图片
if(布尔表达式){
}
  1. if 双选择结构
if(布尔表达式){
}else{
}

JAVA基础_第5张图片
3. if选择结构

if(布尔表达式){
} else if(布尔表达式){
}else if(布尔表达式){
}else{
}

JAVA基础_第6张图片

switch 多选择结构

switch case 语句判断一个变量与一系列值中某个值相等,每个值称为一个分支。
switch 语句中的变量类型可以是:byte、short、int或者char,JavaSE7后switch支持字符串String类型
无break,则会造成case穿透。

switch(expression){
	case value:
		break;
	case value:
		break;
	default:
		
}

循环结构

while循环

当表达式为true,循环会一直执行下去;当表达式不成立时,循环停止。

while(布尔表达式){
 循环内容
}

do…while循环

至少循环执行一次后进入条件判断

do{
}while(布尔表达式)

for循环

for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
for(初始化;布尔表达式;更新){
循环内容
}

加强for

声明语句:声明新的不变量,该变量的类型必须和数组元素的类型匹配
表达式:表达式要访问的数组名,或者是返回值为数组的方法。
for(声明语句:表达式){
}

for(item:array){

}

方法

方法的本意是功能模块,就是实现某个功能的代码片段。方法包含于类或对象中,
我们设计的方法最好保持方法的原子性,就是一个方法只完成一个功能,这样利于后期的扩展。
修饰符 返回值类型 方法名(参数类型 参数名){
。。。
方法体
。。。
return 返回值;
}

修饰符:定义了该方法的访问类型
返回值类型:方法可能返回值,当无返回值时可使用void
方法名:方法的实际名称
参数类型:参数像是一个占位符。放方法被调用时。传递值给参数,这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含参数;
方法体:方法体包含具体的语句,定义该方法的功能。
值传递&&引用传递
引用传递:引用传递中形参实参指向同一个对象,形参的操作会改变实参对象的改变
值传递:无论是基本类型和是引用类型,在实参传入形参时,都是值传递,也就是说传递的都是一个副本,而不是内容本身
结果:java只有值传递

方法重载

重载就是在一个类中,有相同的函数名称,但形参不同的函数
方法重载的规则:

  1. 方法名称必须相同
  2. 参数列表必不相同(个数、类型、顺序不同)
  3. 方法的返回类型可以相同也可以不相同
  4. 仅仅返回类型不同不足以成为方法的重载
    实现理论:
    方法名称相同时,编译器会根据调用方法的个数、参数类型去逐个匹配。以选择对应的方法,如果匹配失败,则编译器报错。

可变参数–

JDK1.5开始,Java支持可变参数。
在方法声明中,在指定参数类型后加一个省略号(…)
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。
本质:数组

testNum(1,2);
public static void testNum(int...i){
		System.out.println(i.length);
		//2 
	}

数组

数组:相同数据类型的有序集合
数组描述的是相同类型的若干数据,按照一定的先后次序排列组合而成。
其中,每一个数据称为一个数据元素,每个数组元素可以通过下标来访问他们

创建数组

  1. int[] arr=new int[size]
  2. int[]={item,item…}

数组的四个基本特点

  1. 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  2. 其元素必须是相同类型,不允许出现混合类型
  3. 数组中的元素可以是任何数据类型,包括基本数据类和应用类型。
  4. 数据变量属于引用类型,数组可以看成是对象,数组中的每个元素相当于该对象成员。数组本身就是对象,数组对象本身就是在堆中

数组边界

【0,数组.length】
超过边界:ArrayIndexOutOfBoundsException : 数组下标越界异常!

二位数组

Arrays 数组工具类

面向对象

面向对象编程(Object-Oriented Programming ,OOP)
面向对象的本质:以类的方式组织代码,以对象的方式组织数据。
三大特性

封装

核心思想:高内聚,低耦合
属性私有get/set
目的:禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问
优点

  • 提高程序的安全性,保护数据
  • 隐藏代码实现细节
  • 统一接口
  • 系统可维护增加了
    举个栗子
    eg : private 类型 名字
    get/set方法(可操作空间瞬间拉大
    方法的本意是功能模块,就是实现某个功能的代码片段,可以在方法中进行一些其他实现。如参数校验。如果是public int age ,使用只直接对象.age=999,这完全是不合理的存在。使用方法则可以添加校验。
    方法就是实现某个功能的代码片段,给对象属性设置值,就是对其数据处理功能。

继承

本质:是对某一批类的抽象,从而实现对现实世界更好的建模
关键字:extends
java类只有单继承,没有多继承。所有的类默认都继承Object

super

  • super调用父类的构造方法,必须在构造方法的第一个
  • super只能出现在子类的方法或构造方法中
  • super和this不能同时调用构造方法

重写

子类重写父类方法

  • 方法名相同
  • 参数列表相同
  • 修饰符只可扩大
  • 异常只可扩大

多态

即同一方法可以根据发送对象的不同而采用不同的行为方式
多态存在的条件:

  • 有继承关系
  • 子类重写父类方法
  • 父类引用指向子类对象

创建和初始化对象

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

构造器

  • 必须和类名相同
  • 必须没有返回类型、也不能写void

static

static 同类一起加载。只加载一次。
匿名 每次创建类就加载一次。


{} // 匿名代码块
static {} // 静态代码块

静态导入包

可以直接导入到静态方法,程序可直接使用方法名去使用。

import static java.lang.Math.random

抽象类

关键字 abstract
可以用来修改方法(抽象方法)也可以修饰类(抽象类),抽象类中可以没有抽象方法,但是有抽象方法一定是抽象类。

接口

只有规范
关键字 interface
定义的方法默认修饰都是:public abstract
定义的都是常量默认修饰都是:public static final

内部类

就是在一个类的内部定义一个类

  1. 成员内部类
public class Outer  {
    private String name;
    private int age;

     public  class  Inner{
        public void testIn(){
            System.out.println("这是一个内部方法");
        }
    }
 }
 // 创建
        Outer outer=new Outer();
        Outer.Inner inner = outer.new Inner();
  1. 静态内部类
public class Outer  {

    private String name;
    private int age;


     public  static class  Inner{
        public void testIn(){
            System.out.println("这是一个内部方法");
        }
    }
   }
  1. 局部内部类
public class Outer  {

    private String name;
    private int age;


    public void testMethod(){
         class  Inner{
            public void testIn(){
                System.out.println("这是一个内部方法");
            }
        }
    }
  }
  1. 匿名内部类
public interface Runnable {
    public abstract void run();
}

new Runnable() {
            @Override
            public void run() {

            }
        };

异常

检查性异常

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

运行异常

运行异常是可被程序猿避免的异常,与检查性相反,运行时异常可以在编译时被忽略。

错误

错误不是异常,二十脱离程序猿控制的问题。错误在代码中尝尝没忽略。

JAVA基础_第7张图片

ERROR

Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
Java虚拟机运行错误,当JVM不再继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机一般会选择线程终止。
还有发生在虚拟机视图执行应用时。如类定义错误、链接错误。这些错误是不可查的。因为它们在应用程序的控制和处理能力之外,而且绝大多是程序运行时不允许出现的状况。

Exception

在Exception分支中有一个重要的子类RuntimeException(运行时异常)

  • ArraylndexOutOfBoundsException
  • NullPointerException
  • ArithmeticException
  • MissingResourceException
  • ClassNotFoundException
    这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类服务的发生

Error和Exception的区别

Error通常是灾难性的致命错误,是程序无法控制和处理的。出现这些异常时,Java虚拟机一般会选择终止线程;
Exception通常情况下可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。

你可能感兴趣的:(java,jvm,开发语言)