java基础理论

java特点
简单性、 解释性、 面向对象、 高性能、 分布式处理、 多线程、 健壮性、 动态、 结构中立、 安全性、 开源、 跨平台、内存优化、垃圾回收处理机制


java跨平台性
     java跨平台原理:
          只要在需要运行java应用程序的操作系统上,先安装一个java虚拟机JVM( Java                             Virtual Machine )即可。由JVM来负责Java程序在系统中的运行。JVM不跨平台


JRE和JDK
JRE:JVM+类库
JDK:JRE + 开发工具包


什么是常量&常量的分类
在程序执行中不可以发生改变的量

常量有字面常量与自定义常量

常量可分为整数常量、小数常量、字符串常量(“”字符串长度0,“ ” 空格字符串)、字符常量(赋值时'’必须存放单个字符与必需要存放)、布尔常量、null常量

进制的转换
十六进制 0000-0000 0000-0000 0000-0000  0101 - 0101   
                                                           5            5    = 0x55

十进制 0000-0000 0000-0000 0000-0000  0101-0101   
                                                                     64+16+4+1=85 

八进制 0000-0000 0000-0000 0000-000 001 010 101   
                                                                    1     2      5 = 0125

二进制 0000-0000 0000-0000 0000-0000  0101-0101   = 0b01010101
进制的表现形式:
十六进制 0x
八进制 0
二进制 0b (java1.7出现的新特性) 

进制的反码
反码是将负数反码后更直观的

为什么定义变量
用来不断存放同一类型的常量,并不断更换

为什么有数据类型
java语言时强类型语言,对每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间

数据类型
整数类型、浮点类型、字符类型、布尔类型、引用类型

数据运算注意事项
1.两个变量的取值范围小于int取值范围时,自动隐式转换成int类型进行运算。
2.java编译器有常量优化机制判断常量有没有超过目标类型的取值范围,超出报错,没超出就赋值

逻辑运算符
&&和&的区别
     最终的运算结果是一样
     &&具有短路效果,如左边为false。则不运行右边
     &不管左边时false还是true。都会运行右边
||和|的区别
     最终的运算结果是一样
     ||具有短路效果,如左边为true。则不运行右边
     |不管左边时false还是true。都会运行右边

面试题不用第三方变量,将两个变量内的值互换
用异或运算符^解决

选择结构
if和三元运算符的区别
     三元运算符可以实现的功能,if语句都可以实现。反之不成立

switch注意事项
     case后面只能跟常量(byte,short,int,char,String,枚举),不能跟变量
     switch在JDK1.5之后加入枚举类型,在JDK1.7加入String

switch建议在判断固定值的时候使用
if建议在判断区间或范围的时候使用

转义字符
\是转义号

\t tab键的位置
\r 回车
\n 换行
\“双引号
\’单引号

控制跳转语句
break
     作用是退出循环或switch
     适用于所有循环语句和switch语句中,离开以上使用场景无意义且编译报错

continue
     作用是终止此次循环,进入下次循环
     适用于所有循环语句中,离开以上场景无意义且编译报错

return
     作用是结束方法
     适用于方法中,注意的是return后面的语句不会执行且会编译报错

java内存划分
内存划分:
寄存器 :交给cpu处理
本地方法区 :
方法区 :储存字节码文件
栈内存 :栈内存储存的都属于局部变量,且当变量的作用域结束自动释放该变量
堆内存 :堆内存存储数组和对象(数组就是对象),凡事new建立出来的都在堆中。当对象无引用时,垃圾回收机制自动回收

数组
数组可以储存基本数据类型,也可以储存引用数据类型。

什么是数组的初始化?
     就是为数组开辟连续的空间,并为每个数组初始化

整数类型的初始化值为0
浮点类型的初始化值为0.0
布尔类型的初始值为false
字符类型的初始值为\u0000

数组内存地址:[I@19bb25a

[代表有多少个[就是多少维数组
I代表int数据类型的数组
19bb25a代表内存地址

操作数组方法:遍历、取最值、反转、查表法

数组反转代码演示
int[] arr = new int();
for(int i=0 ;i<arr.length/2 ;i++){
          int temp = arr[ i ];
          arr[ i ] = arr[ arr.length-1-i ];
          arr[ arr.length-1-i ] = temp;
}

冒泡排序代码演示
public static void Demo( int [] arr ) {
for ( int i = 0; i < arr . length -1; i ++) {
for ( int j = 0; j < arr . length - 1 - i ; j ++) {
if ( arr [ j ] > arr [ j +1])
swap(
arr , j , j +1);
}
}

for ( int i : arr ) {
System.
out .print( i + " " );
}
}

选择排序代码演示
for ( int i = 0; i < arr . length - 1; i ++) {
for ( int j = i +1; j < arr . length ; j ++) {
if ( arr [ i ] > arr [ j ])
swap(
arr , i , j );
}
}

二分查找代码演示
public static int checkArr( int [] arr , int i ) {
     int max = arr . length -1;
     int min = 0;
     int mid = arr . length /2;

while ( max >= min ){
if ( arr [ mid ] > i ){
max = mid - 1;
}
else if ( arr [ mid ] < i ){
min = mid + 1;
}
else if ( arr [ mid ] == i ){
return mid ;
}
mid = ( min + max ) / 2;
}

return -1;
}

面向对象
什么是面相对象?
     面相对象强调的是对象,对象中有某种实现功能的方法,更符合人的思想习惯,将复杂的问题简单化
什么是面相过程?
     面相过程强调的是过程,通过一步两步一步步实现功能

面相对象,面相过程有什么好处?
     从执行者变成指挥者
          —>指挥对象实现某种功能
          —>懒人思想

面相对象的三大特征
     封装、继承、多态

什么是类?
     在java中描述事物都是通过类的形势,类有属性和行为组成。可以理解成一个模子、图纸,也可以理解为对事物              
     的描述

什么是对象?
     该类事物的具体体现

 类和对象是什么关系?
     可以通过类创建(可以理解为类是一个图纸,由图纸创建出一个实体)

什么是成员变量,什么是成员方法?
     成员变量指的是属相 —>事物的基本信息
     成员方法指的是行为 —>事物可以做什么

成员变量与局部变量的区别?
     所在的位置不同
          成员变量在类中方法外
          局部变量在类中方法中和方法声明上(形参)
     内存的所在位置不同
          成员变量在堆内存中
          局部变量在栈内存中
     生命周期不同
          成员变量随着对象的创建而存在,随着对象的消失而消失
          局部变量随着方法的执行而存在,随着方法的弹栈而消失
     初始化的不同
          成员变量有默认初始化
          局部变量没有默认初始化,需要初始化后才能使用

什么是匿名对象?
     匿名对象就是没有名字的对象,没有引用去记录它的地址值

什么时候使用匿名对象?
     只对方法进行一次调用的时候可以使用匿名对象
     匿名对象可以当作实参传递

封装
封装的概述
     是指隐藏对象的属性和实现细节,对外暴露公共的访问方式
     插排例子

封装的好处
     隐藏了实现细节,对外提供了访问方式
     提高了代码的复用性
     提高了安全性

封装的原则
     将不需要对外提供的内容都隐藏起来
     把属性隐藏,提供公共的访问方式

this关键字概述与使用
     this就是当前对象的引用
     局部变量与成员变量重名的时候可以用this区分

构造方法
构造方法的概述和作用
     给对象的数据进行初始化

构造方法的重载
     方法名相同,构造方法没有返回值类型(void也不用写),参数列表不同

构造方法的注意事项
     没有自定义构造方法的时候系统会自动加上无参构造方法
     如果自定义构造方法后,系统将不再自动加上无参构造方法,这时候要自己补上

成员变量的赋值方式
     setXxx() 调用方法赋值
     在构造函数中=赋值

static关键字
static是修饰符
static关键字的特点
     随着类的加载而加载
     优先于对象的存在
     被类的所有对象所共享
     可以通过类名.来调用     

static的注意事项
     在被static修饰的方法中不可以存在this,因为this代表对象,静态类加载的时候对象还不存在
     静态方法只能访问静态成员与静态方法
     
main方法的格式详解
public :被jvm调用,访问权限要足够大
static  :被jvm调用,不用创建对象,直接调用
void    :   jam虚拟机不需要范围值 
main   :   一个能被jvm识别的名称,不是关键字
String[] args :以前用于键盘录入

代码块
什么是代码块?
     被{}括起来的代码称之为代码块

代码块分为几种?功能分别是什么?
     局部代码块:
          定义在类中方法中,作用时限制变量的生命周期,提早释放内存
     构造代码块
          定义在类中方法外,作用如果构造方法里面有重复的代码可以放在构造代码块中,构造代码块在构造方法之        
          执行
     静态代码块
          定义在类中方法外,被static关键字修饰,作用是完成一些驱动的加载,静态代码块随着类的字节码文件加载
          完毕而调用

继承
继承的概述
     类与类之间产生子父关系,称之为继承
如何实现继承关关系
     子类 extends 父类{}

继承的好处与弊端
     好处:
          提高了代码的复用性
          提高了代码的可维护性
          让类与类之间产生关系延伸出多态
     坏处:
          让代码的耦合性增强了

     开发原则:高内聚低耦合

java继承的特点
     java不支持多继承,支持多层继承(爷、父、子)
     如果想要使用这个体系的所有功能,就要创建最底层的类
     如果想要知道这个体系的共性,就需要查看最顶层的类

什么是继承?
     继承是一种 is a 的关系
          什么是属于什么,好比
               水果:
                         苹果 、雪梨
继承的注意事项?
     不要为了部分功能而去继承
     子类无法访问父类的私有成员
     子类无法继承父类构造方法,但可以通过super访问

继承中成员变量的关系
     子类可以继承父类中没有被私有化的成员变量

如过子类中出现了和父类相同的成员变量,这时候调用谁?
     延用就近原则调用子类里面的成员变量

在继承冲this 和 super的区别
     this代表的是当前对象的引用,谁在调用喔,我就代表谁
     super代表的是当前对象的父类引用

          成员变量:
                   this可以调用本类的变量,也可以调用父类的变量(因为继承了父类的成员变量)
                   super可以调用父类的成员变量
          成员方法:
                    this可以调用本类的方法,也可以调用父类的方法(因为继承了父类的成员方法)
                    super可以调用父类的成员方法
          构造方法:   
                    this可以调用本类的构造方法,可以间接调用父类的构造方法
                    super可以调用父类的构造方法

子类在初始化之前是否需要初始化父类?
     子类所有的构造方法都会默认加上super() 因为子类对象可能访问父类数据
     那么如果父类没有完成初始化的话,就无法访问父类的数据

     在java类中所有类的构造方法中都会自动加上一句super() 因为就算没有extends 继承一个类也会默认
     继承Object类

继承构造方法中的注意事项?
     this() 或 super() 必需出现在构造方法的第一条!两者都必须在构造函数的第一条,那么意味着不能共存
     如果this出现在第一条的时候,会通过本类访问构造方法,本类的其他构造方法再去访问父类的构造方法

如果子父类同时有一样的方法,该调用谁??如果要调用父类的方法该如何调用?
     掉用子类中的方法,就近原则,牵引出代码的重写
     要调用被父类的方法可以通过super关键字点上方法名调用

重写
重写的概述
    当子类中出现和父类一模一样的方法(方法名一样,返回值一样,参数列表相同)
    当子类需要父类的功能时,子类又有自己的方法体,那么这时候就可以考虑对父类的方法进行重写(覆盖)
     这样沿用了父类的方法,有保留了子类的特有功能

重写的注意事项
     父类中被private修饰的方法,无法被重写(因为无法访问,所以谈不上重写)
     重写时不能比父类的方法权限低(最好一致)
     静态只能覆盖静态(算不上重写)

重载和重写的区别?
     重载:
          在同一类中,方法名相同,参数列表不同,于返回值无关
     重写:
          在子父类中,方法名相同,参数列表相同,于返回值有关

final关键字
final关键字的特点
     被修饰的类无法被继承
     被修饰的方法无法被重写
     被修饰的变量变成为常量

     被final修饰的基本数据类型无法被修改
     被final修饰的引用数据类型地址值无法被修改,但是可以修改属性
     
final修饰变量初始化时机
     显示初始化
     在构造方法中初始化
     被静态修饰的final变量,只能显示初始化活着静态代码块初始化
     

多态
多态的概述
事物的多种形态

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

多态好处
     提高代码的维护性
     提高了代码的扩展性
多态弊端
     不能使用子类特有的行为和属性

多态成员访问特点
     成员变量
          编译看左边(父类),运行看左边(父类)
          引用是父类,看得到所有的对成员,就近原则选择的是父类的变量
     成员方法
           编译看左边(父类),运行看右边(子类)
           编译时会看父类有没有此方法,如果有,保证编译通过,如果子类重写就调用重写后的方法,成为动态绑定
 
     静态方法
           编译看左边(父类),运行看左边(父类)
           因为是父类引用,相当于父类.静态方法,所以调用的是父类的静态方法
     
向上转型是什么
     将子类自动提升为父类
向下转型是什么
     强制类型转换 把父类强制转换为子类
     

abstract

abstract不能和那些关键字共存
     被abstract修饰的方法没有方法体,被abstract修饰的方法需要强制重写
     1.被static修饰的方法可以被类名点上调用,但是被abstract修饰的方法没有方法体没有意义,所以不能共存
     2.被final修饰的方法和类都是最终的,被abstract修饰的方法或类是需要被重写或继承的,如果最终就不能继
     承或重写,abstract就没有意义,所以不能共存
     3.被private修饰的方法继承后无法访问,所以abstract修饰没有意义,所以不能共存

抽象类
抽象类概述、抽象方法
    被abstract修饰的类是抽象类
     
抽象类、方法如何定义?
     通过abstract关键子修饰的类就是抽象类
     通过abstract关键在修饰的方法是抽象方法
     抽象方法是没有方法体的,只有声明

抽象类中一定有抽象方法吗?
     不一定,但是抽象方法一定在抽象类或接口中

抽象类可以实例话吗?
     抽象类不可以创建实例
     但是可利用多态的形势
     父类引用指向子类对象实例话

抽象的子类
     抽象类的子类要么是抽象方法
     要么重写这个类所有的抽象方法

抽象类中成员的特点
     成员变量可以是变量也可以是常量,abstract不可以修饰变量
     抽象类中可以定义抽象方法,也可以定义非抽象方法
     抽象类是有构造方法的,目的是给子类进行初始化的

抽象方法的作用
     强制控制要求子类去重写

接口
接口概述
     从狭义的角度讲,java中的interface就是接口
     从广义的角度讲,对外提供规则的都是接口

接口特点
     定义接口的关键子是interface
          interface 接口名{}

     使用接口用implements
          类名 implements 接口口{}

     接口可以实例化吗
          接口不能实例化,因为接口里的方法全是抽象方法,所以实例化后没有意义
          但是可以多态,借口引用指向子类对象
     
     接口子类
          可以是抽象类,但是意义不大
          可以是具体类。要重写所有接口方法

接口中成员的特点
     成员变量
          成员变量只能是常量,并且是公共和静态q的
          public static final int num = 10;
          三个关键子可以随意调换位置
     
     构造方法
          接口没有构造方法

     成员方法
          接口中所有方法都是抽象方法
          实现接口中的方法实必需实public修饰

抽象类和接口的区别
     成员区别
          抽象类:
              成员变量:可以是变量,也可以是常量
               成员方法:可以是抽象方法也可以非抽象方法
               构造方法:有
          接口:
               成员变量:只可以是常量
               成员方法:只可以是抽象方法

     类、接口的各种关系
          类与类
               继承关系,只支持单继承,但是支持多层继承
          类与接口
               实现关系,可以单实现,也可以多实现
               在一个继承的同时可以实现多个接口
          接口与接口
               继承关系,可以单继承,也可以多继承

     设计理念区别
          抽象类 被继承体现的是“is a” 的关系。抽象类中定义的是该继承体系的共性
          接口 被实现的体现是“like a” 的关系。 接口定义的是该类继承体系的扩展功能
          对事物本质的抽取用抽象类,对事物的扩展用接口
     
什么是包
     指的就是文件夹
     可以管理.class文件

怎么划分包
     可以按照功能划分
     也可以按照模块划分

包的格式
     公司域名倒着写

定义包的格式
     package 包名

包的注意事项
     定义包必需是程序的第一行可执行语句
     package在一个java文件中只能有一个
     如果没有package,默认无包名

包编译与运行
     带包编译: javac -d . 类名.java    
     带包运行: java 全类名

不同包访问
     跨包访问创建对象,如果不导包的话
     需要用全类名创建对象

     跨包访问,需要public修饰 不然找不到

import
import 概述
     import是用来导包的
     导包其实是导入具体的类
     导包之后,导入的类就就对本类可见

四种权限修饰符
                         本类     同一包下(无关类 子类)     不同包下(子类)      不同包下(无关类)
private               Y     
默认                   Y               Y
protected          Y               Y                                       Y
public                Y               Y                                        Y                         Y


内部类
内部类概述
     类中还有类,在类中定义类

成员内部类访问特点
     内部类访问外部类
          可以直接直接获取外部类的成员,包括私有
     外部类访问内部类
          必需创建对象访问

      成员内部类私有使用
          被private修饰的内部类
          外部不能直接创建内部类对象

     静态成员内部类使用

实例化内部类格式
     外部类.内部类.  对象名 = new 外部类().new 内部类();


匿名内部类
什么事匿名内部类
      简单来说就是没有名字的内部类
     
匿名内部类的格式
     new 类名或者接口名(){
     重写方法
};
  
什么时候使用匿名内部类
     对方法进行一次调用的时候使用
匿名内部类可以向下转型吗
     不可以!没有子类名字
匿名内部类应用
     当作参数传递
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值