栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java尚硅谷核心知识

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java尚硅谷核心知识

这里写目录标题
  • Java基础部分
    • 为什么要为JDK设置环境变量
    • JDK、JRE、JVM
    • Java的关键字和保留字
    • Java的数据类型
      • 强类型和弱类型
      • 基本类型包括:
        • 自动提升以及强制转换
          • 自动提升
          • 强制准换
        • 有byte、short、char的混合运算时结果都为int类型
      • 引用数据类型包括
    • Java文件的执行过程
    • Java的核心
    • Java为什么能够跨平台
    • JVM的组成
    • 运算符
    • 流程控制
    • 数组
      • 二维数组
      • 算法中数组的应用
    • oop--万物皆对象
      • oop三大特性
      • 封装
      • 继承
      • 对象的内存解析
      • 对象数组的内存解析
      • 成员变量(属性)和局部变量
      • 对象数组
      • Java中参数传递
      • 匿名内部类
      • 构造器constructor
      • this关键字:指向本地的属性
  • Java常用的方法解释
    • compare()方法

Java基础部分

Java是一种一次编译,到处运行的语言
Java是一种面向对象的编程语言
Java有一个很大的优势在于有自动回收垃圾的机制

为什么要为JDK设置环境变量

在cmd中可以在任何地方调用JDK指令

JDK、JRE、JVM

JDK是Java开发工具包
JRE是Java运行环境
JVM是Java虚拟机
JDK=JRE+java开发工具(javac.exe(编译)、java.exe(运行))
JRE=JVM+核心类库

Java的关键字和保留字

Java中有很多关键字,保留字是指以后的版本可能会用到(goto和const)
在Java中变量的名字不能关键字或者保留字

Java的数据类型

Java是一种强类型语言

强类型和弱类型

强类型语言:是指强制要求为变量设置类型,在编译前就把数据类型进行确定
弱类型语言:是指是在编译后确定数据类型,没有明显的类型,随着环境的不同,自动变换类型。var a=10;编译前无法确定它的类型。

一共有两种。一种是基本类型,另一种是引用类型

基本类型包括:

byte、short、int、long、float、double、char、boolean

注意:

  • Java中char的范围和c语言中char的范围有区别Java中char占用两个字节,范围是0–65535。
  • 1byte=8bit;
  • long a=12; float b=12;这两种情况不会报错,是因为自动提升的原因
自动提升以及强制转换 自动提升

基本类型中容量小的和容量大的一起运算时,会发生自动提升现象
注意:float的范围比long的还要大。是因为它们底层的存储结构不同。float/double使用科学计数法来存储,而long使用普通的二进制来存储,也就是说一个存的是多少次方,而一个是只有多少位。

强制准换

是指在大容量向小容量转换时发生的,在强制转换时会有精度损失

注意:类型转换都是基本类型之间的,String不能和基本类型之间进行转换,但是包装类可以和String进行转换

有byte、short、char的混合运算时结果都为int类型 引用数据类型包括

String、Array、Interface

Java文件的执行过程

Java的核心
  • JVM
  • 垃圾回收机制:自动监测对象是否超过作用域(可达性分析和引用计数),进行回收
Java为什么能够跨平台

Java语言的运行依赖于JVM,不同的操作系统有不同的JVM

JVM的组成

类加载子系统、运行数据区(内存)、执行引擎、本地接口库,本地方法库

运行时数据区包括:堆、JVM栈、程序计数器、方法区、本地方法栈

JVM栈:用来存储局部变量、对象引用
堆:存放对象实例,用来存储新创建的对象以及数组
方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。有个静态域,用来存储被static修饰的静态方法属性或方法。

运算符
  • 算术运算:+ - * /
  • 赋值运算:
short s=2;
s=s+2;//编译不通过,类型不一致
s+=2;//编译通过,运算时不会改变类型
  • 比较运算
    instanceof
 System.out.println("hello" instanceof String);//true
  • 逻辑运算
&:逻辑与
&&:短路与
|:逻辑或
||:短路或
^:异或。相同为0不同为1
!:非
  • 位运算
<<左移,相当于*2
>>右移,相当于/2
&与运算,都1为1
|或运算,有1为1
^异或运算  110^011=101==>5
~取反运算  ~6=7  (补码)0110<==>(补码)1001==>0111(源码)==>7
  • 三目运算符
    举个栗子:
//如果a<60,将a的值置为0。
int a=a>60?a:0;
  • 运算符优先级
流程控制
  • 顺序结构
  • 分支结构 :if……else…… switch( ) case:
  • 循环结构:for、where
数组

数组是一种能存储相同数据类型,但是需要占用连续空间数据结构。需要注意的是:长度一旦确定,就不能再进行修改。

注意:数组的索引是从0开始的而数据库库的索引是1开始的,在连接数据库时需要注意。

二维数组

就是两个一维数组组成的数组栈中的引用指向堆,堆中存的也是一个引用

算法中数组的应用
  1. 数组元素的赋值(杨辉三角、回形数等)
  2. 求数值型数组中元素的最大值、最小值、平均数、总和等
  3. 数组的复制、反转、查找(线性查找、二分法查找)
  4. 数组元素的排序算法(稳定性)A和B相等排序后,A和B的次序不变(应用:商品首先根据销量排序,再根据价格排序,就需要排序的稳定性)
oop–万物皆对象

在Java中将功能结构封装在类中,通过类的实例化来调用具体功能结构

主流编程语言要么是面向过程(强调考虑怎么做),要么是面向对象(强调谁来做)。程序员从面向过程的执行者转化成了面向对象的指挥者

举个栗子:把大象装进并冰箱

类:是指对一类事物的概括。
对象:是指存在的一个真实个体

对象一般通过new来创建。类名 对象名 = new 类名();
如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰

A a=new A();
A b=a;//a和b指向同一位置,修改b也在修改a
oop三大特性
  • 封装:将属性或方法封装起来,给外界流出访问他的接口,不展现具体细节
  • 继承:一个子类继承一个父类,能够直接调用父类的非私有属性和方法,通过set、get也能访问私有属性。
  • 多态:分为运行时多态(overload)和编译时多态(override),多态的三个必要条件 :1.要有继承(实现implements) 2.要有重写(overWrite&overRide) 3.父类引用指向子类对象
封装

将方法和属性进行私有化,对实现细节进行隐藏,只暴露出供外界使用的接口

封装的体现:将属性进行私有化,然后通过set和get对属性进行设置和获取

继承

Java是单根继承,一个子类只能继承一个类。但是可以实现很多个接口

说明:所有的子类都会直接或间接继承Object类

对象的内存解析

对象数组的内存解析

成员变量(属性)和局部变量

形同点:

  • 定义变量的格式相同
  • 都是先声明后使用
  • 都有相应的作用域

不同点:

  • 属性定义在类下,局部变量定义在方法,构造器等内部
  • 属性可以用权限修饰符,局部变量不可以用权限修饰符
  • 属性加载到堆中,局部变量加载到栈中
  • 属性有默认初始值,局部变量没有初始值

对象数组

引用类型:无论是系统提供的还是用户自定义的,在调用时都需要进行实例化来使用

Students []stu=new Students[20];
int n=sc.nextInt();
for(int i=0;i
    stu[i]=new Student();//存在数组里的对象进行实例化
}
Java中参数传递

Java只有值传递

  • 当传递类型是基本类型时,传递的就是参数真实的值,在方法中对值进行修改,不影响本身的值
  • 当传递类型时引用类型时,传递的就是地址的值,在方法中进行修改数据时,会影响本身的值

不是说只要传递的参数是引用类型的就会修改数据的值,他的大前提是传递前后两个引用指向的是同一块内存。

举个栗子:

String s="hello";
Test test=new Test();
test.change(s);
//    change(String s){
//        s="hi";
//    }

System.out.println(s); 
匿名内部类

就是没有名字的一种嵌套类,一个接口/类的方法的某个实现方式在程序中只会执行一次,但为了使用它,我们需要创建它的实现类/子类去实现/重写。此时可以使用匿名内部类的方式,可以无需创建新的类,减少代码冗余。

假设当前有一个接口,接口中只有一个方法

public interface Interface01 {
    void show();
}

为了使用该接口的show方法,我们需要去创建一个实现类,同时书写show方法的具体实现方式

public class Interface01Impl implements Interface01{
    @Override
    public void show() {
        System.out.println("I'm a impl class...");
    }
}

如果实现类Interface01Impl全程只使用一次,那么为了这一次的使用去创建一个类,未免太过麻烦。我们需要一个方式来帮助我们摆脱这个困境。匿名内部类则可以很好的解决这个问题。

我们使用匿名内部类

public static void main(String[] args) {
    Interface01 interface01 = new Interface01() {
        @Override
        public void show() {
            System.out.println("这里使用了匿名内部类");
        }
    };
    //调用接口方法
    interface01.show();
}

构造器constructor

构造器非为默认构造器和默认构造器,系统会提供一个默认构造器。
构造器与非构造器之间是重载关系

想要调用另一个类的方法,就需要将类实例化成对象然后调用类里面的方法和属性

this关键字:指向本地的属性
  • 在类的构造器中,可以使用this()调用本类的其他构造器,在用this进行调用构造器时必须放在第一行
//boy类的marry方法
marry(Girl girl){
       System.out.println("I Love girlA");
}
//girl类的marry方法
marry(Boy boy){
       System.out.println("I Love boyA");
       boy.marry(this);//谁调用marry,this就是谁。boyA回应 I Love girlA
}
Java常用的方法解释 compare()方法
  • 当前对象和传入对象相同,返回0
  • 当前对象大于传入对象,返回正数
  • 当前对象小于传入对象,返回负数
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/858102.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号