JavaSE -知识点复习(1)

一.Java概述

  1.  1991年sun公司的James  Gosling等人开发名为oak(橡树)的   语言,希望控制嵌入在有线电视交换盒,PDA等微处理器。1994年更名         为Java。

  2.  Java的三种技术架构:

        J2SE(标准版):桌面应用开发版,包含Java的核心类,如数据库连接,接口定义,输入输出,网络编程。是其他两者的基础

        J2EE(企业版):开发企业环境下的应用程序,主要针对web应用的开发,包含J2SE中的核心类以及开发企业级应用的类,如 servlet,xml

        J2ME(微缩版):开发嵌入式设备和电子消费产品贵,主要针对移动端应用开发,包含J2SE中的部分核心类,新添加了些专有类


   3.  什么是JVM?  JDK?  JRE?

        JVM(Java Virtual  Machine):Java虚拟机,Java实现跨平台特性的核心部分,所有的Java程序首先会被编译成.class字节码文件,然 后再由 JVM将改程序解释给本地操作系统运行,也就是说class文件不与系统直接交互,这样就实现了Java跨平台特性

        JRE(Java Runtime Environment):Java运行环境,包含了解释class文件所需的类库(存于lib下)和JVM二进制字节码文件(存于bin下)

        JDK(Java Development  Kit):Java开发工具包,其目录中主要包括bin,jre,lib,include四大部分。由此我们可以看出JDK包含JRE, bin:包含javac编译器的二进制字节码文件      jre:Java运行环境      lib:类库         include:JVM和Java交互所需头文件


     4.   配置环境变量(classpath)

           让java/jdk/bin目录下的工具能在任意处运行,当系统需要用到该工具如javac编译器器时会自动去环境变量配置的目录下寻找

     5.   java命名规范

①类名,大驼峰式命名(首字母大写,之后每个完整单词首字母大写)如TestName

②方法名,小驼峰式命名(首字母小写,之后每个完整单词首字母大写)如testName

③常量名全部大写

④包名全部小写

所有命名遵循以下规则:

①只能由数字,字母,_,$构成 

②不能以数字开头

③不能使用关键字命名




二.数据类型

      1.基本数据类型

数值型:整数型:int(4字节),byte(1字节),short(2字节),long(8字节)

               浮点型:float(4字节),double(8字节)        注:输入数字默认为int,输入小数默

                             认为double

布尔型:boolean(1字节)

字符型:char(2字节)

级别排序:byte,char,short(这三个平级) <  int < float < long < double

自动类型转换:自动转换,从低级别到高级别。

强制类型转换:手动把高级别转化低级别,如,int  a  =   (int)1.2; 可能会造成精度溢出  可把int类型值赋给byte,char,short等类型变量而不需强制转换,前提是不超出其对应表述范围

基本类型默认值


           2.引用数据类型

     包含数组,类,接口,String(除基本数据类型外都是引用类型),引用类型的默认值为null    




三.运算符

 1.算数运算符
     +,-,*,/,%    注:若接受类型为整数型,/运算结果只会取整数部分,如5/2 = 2

     ++(自增),--(自减)

     ++i和i++的异同

     共同点:①都等价于i = i + 1      ②如果i++,++i是一条单独语句,则二者没区别    

                   ③都仅适用于变量

     不同点:如果i++,++i不是单独的语句,i++表示先运算后增加,++i表示先增加后运算

                    int x=5;int y=x++;System.out.println("x="+x+", y="+y);    //以上代码运行后输出结果为:x=6, y=5

                    int x=5;int y=++x;System.out.println("x="+x+", y="+y);    //以上代码运行后输出结果为:x=6, y=6


 2.赋值运算符                                   

     =,-=,+=,*=,/=     注:=为赋值运算,而不是判断两数是否相等!    i+=2等价于(i=i+2)

 3.比较运算符   

    >,<,>=,<=    结果为true或false

  4.逻辑运算符

   !,&,|,&&,||,^    注:除!外都是双目运算符

   ^:异或,两边结果相同返回false,不相同为true

   &&(短路与)和&的区别:&&,只要第一个表达式为false,则直接返回false,不进行下个表达式的判断。&,不管第一个表达式值为什么,下个表达式都要进行判断

   ||(短路或)和|的区别:||,只要第一个表达式为true,则直接返回true,不进行下个表达式的判断。 |,不管第一个表达式值为什么,下个表达式都要进行判断

    5.位运算符

     &,|,^,<<,>>,>>>(无符号右移)

     位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整型数。如对于位运算符“<<”, 是将一个数左移n位,就相当于以了2的n次方,2*8 == 2*2^3(2的3次方) ==  2 << 3

     &,|,^,的使用也要先将数转化为二进制类型

     &:两操作数对应位都为1则返回1,否则返回0

     |:两操作数对应位有1个数为1,则返回1,否则返回0

     ^:两操作数对应位相同则返回0,不同则返回1




四.常用语句

1.条件语句

if(表达式){ 语句 },  if(表达式1){ 语句1 }else{语句2  },  if(表达式1){ 语句1 }  else if(表达式2){ 语句2}

switch(变量){

   case 值:待执行语句;

   .....

   default:默认执行语句

}

  注:①若匹配不到对应的case条件,则会执行default;

         ②若匹配到了条件,但在执行语句末尾无break,则会继续往下执行所有case,

和default语句,直至遇到break

         ③switch后括号中变量只能是byte,char,short,int类型值


2.循环语句

while(表达式){ 循环体 };  do{循环体}  while(表达式)

for(定义变量;表达式;变量变化){循环体}


while和do while的区别:

①while是先判断再执行,那么可能会一次都不执行

②do while是先执行再判断,至少会执行一次


for和while的选择:

如果想要控制循环次数,那么一般使用for循环,如果循环次数未知,那么可以使用while循环


break关键字:跳出当前循环(若嵌套有外层循环,则只是跳出内层循环),或者结束switch语句

continue:跳出本次循环,将程序执行权交由判断语句



五.数组

数组是相同数据类型的有序的集合,数组会在内存中开辟一块空间,每个空间相当于一个变量,数组的元素可通过下标获取,下标索引从

0开始

 1.数组的定义 

   ①动态初始化

       int[ ] a = new int{1,2,3}  ;       int[ ] a = new int[ 3]{ };a[0] = 1

   ②静态初始化

       int[ ] a = {1,2,3}

   注:①数组只能存储基本数据类型以及String类型的值

          ②数组长度在初始化后便无法更改



六.类与对象

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。类和对象好比图纸和实物的关系,模具和铸件的关系。比如人类就是一个类,人类具有身高,体重等属性。人类可以吃饭、说话。相当于有这些方法。小明就是一个具体的人,也就是实例,他的属性是具体的身高200cm,体重180kg,他做的具体的方法是吃了一碗白米饭,说了“12345”这样一句话。

1.面向过程和面向对象

   面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;

  面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

面向对象的特点:①可以将复杂的业务的业务逻辑变简洁,增加代码的复用性

                             ②具有抽象,封装,继承,多态等特性

举个栗子:我要炒一盘青椒肉丝吃

面向过程的实现思想是:洗青椒,切青椒,切肉,炒菜

面向对象的实现思想是:首先将整个流程中涉及到的东西分为几个对象,我,青椒,锅,肉。那么在这个过程中“我”负责洗菜,切菜, 切肉,炒菜,青椒和肉负责变熟变好次,锅负责加热


两者区别:①面向过程以实现功能的函数开发为主,面向对象要首先抽象出类,属性及其方法,然后通过实例化类,执行方法来完成功能

                  ②面向过程封装是功能,面向对象封装的是功能和方法

                  ③面向对象具有继承性和多态性,而面向过程没有继承性和多态性       

2.变量

   变量即可以被改变的数据,创建一个变量时,会在内存中创建一个小空间,如int a = 1,a即为这个空间的名,1即为这个空间里存储

   的内容

   java变量分为成员变量(静态变量,实例变量),局部变量

   成员变量:定义在类中的变量

   静态变量:static 关键字修饰,表示该类共有的对象,而不属于某个类独有,在类加载

                     时便会被初始化赋值

   实例变量:每一个实例所拥有的变量,创建对象时会被初始化赋值

   局部变量:定义在方法中的变量,作用范围在整个方法


   访问权限控制符:

    private(私有访问控制符),指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。

   default(默认访问控制符) ,可以被同包不同类访问

    protected(保护访问控制符),指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。

     public(公共访问控制符),指定该变量为公共的,他可以被任何方法访问。

    friendly ,在同一个包中的类可以访问,其他包中的类不能访问。

                 一般是推荐使用private,这样能保证数据的安全性


3.函数

   函数是具备特定功能的一段代码块,解决了重复性代码的问题。

   格式为:修饰符  返回值  类型  函数名(形式参数1...){

                 函数体语句;

                 return返回值;

   }

    java函数分为一般函数和构造函数

    一般函数:通过类名.函数名()或对象名.函数名()调用,可多次调用

    public  int  test(){System.out.print("111");  return  2;}

    构造函数无返回值类型,只在对象创建时执行一次

    public  User(){System.out.print("111")}


    访问权限控制符:

     private(私有控制符),指定此方法只能有自己类访问

     default,默认的访问控制权限 ,可以被同包不同类访问

     protected(保护访问控制符),指定该方法只能被它同包不同类和不同包中子类访问。

     public(公共控制符),可以被同包不同类以及其他包中的类访问  

    函数重载:在同一个类中可存在多个函数,函数名称相同但参数不同。这就是函数的

                      重载(overlording)。

                      ①函数名和返回值类型完全一致。

                      ② 参数的数量不同、或数量相同而类型和次序不同,以方便JVM区分到底 

                           调用哪个函数。

                       ③返回值类型,修饰符可相同也可不同

                       注:判断是否是重载必须是程序在编译期能判断出两同名方法不是同一 

                              方法


    函数重写:在子类中对父类方法的方法体进行重新编辑(overriding)

                      ①重写的方法必须和被重写的方法必须具有相同的函数名,参数,类型

                      ②重写的方法不能使用比被重写方法更严格的修饰符

4.类

类时某一类事物的抽象,是一个模板,它描述一类对象的行为和状态。

类的基本结构

属性:对象数据的描述     

普通方法:对象的行为   

 构造方法:用于实例化对象    

 块:分静态块与实例块     类的声明:(访问权限修饰符public.default(可忽略不写,为默认))(修饰符final.abstract.synchronized)class  类名{    类体   }

 注:程序默认会生成无参构造方法,初始化实例时默认调用无参构造方法

创建一个类


5.对象

   对象是类的一个实例,有状态和行为。例如,小明是一个对象,它有:名字,年龄;行为有:吃饭、睡觉、等。

   创建方法:

  ①通过new 关键字创建

  ②通过class类的newInstance()方法


    对象创建的流程:

    父类的静态字段——>父类静态方法——>父类静态代码块——>子类静态字段——>子类静态方法——>子类静态代码块——>父类成员变量(非静态字段)——>父类非静态方法——>父类非静态代码块——>父类构造器——>子类成员变量——>子类非静态方法——>子类非静态代码块——>子类构造器


通过new关键字创建对象

6.封装

   将实现方法的细节和流程隐藏起来,给外界提供一个接口用于访问,就比如我们直接通过对象名.方法名来调用一个方法,而不知道方法里面具体是什么

封装的优点:①提高了代码复用性

                     ②提高了代码的安全性,隐藏了细节

                     ③高内聚:仅在方法内维护代码

                     ④低耦合:使用者调用方法十分方便

7.继承

   一个类或取已有类的非私有属性和方法,并且可以在该类中新增属性和方法。例如交通工具是一个类,该类中有运动这个方法。飞机也是一个类,继承了交通工具类,那么飞机类就是子类,交通工具类就是父类。飞机也会有运动这个方法,并且可以重写该方法中的内容。此外,飞机类也可以自己创建其他的方法。

继承的优点:①提高了代码的复用

                     ②增加了代码的扩展性(子类中可以创建新属性和方法)

父类
子类

8.抽象

  抽象指的是在抽象类或接口中声明该方法而不实现,交由继承该方法或实现该接口的子类来具体的实现

抽象类:使用abstract关键字修饰的类,其特点如下

 ①和普通类一样,其可以有静态方法,实例方法,成员变量,构造方法,代码块

 ②可以有abstract修饰的方法(抽象方法,仅声明,子类中实现),且抽象方法修饰符只能为public,protected(若为private则无法被继承)

 ③无法创建其实例对象,但其子类在创建对象时也会调用他的构造方法

 ④一个类继承了抽象类必须实现其父类所有抽象方法,否则该类也必须声明为抽象类


接口:和抽象类类似,其与抽象类的共同点和区别如下

共同点:

①都不能通过new被直接实例化,如要创建对象,必须指向子类引用

②都需要被继承或实现


区别:

①接口中的方法都是public abstract修饰的,都是抽象方法,抽象类中可以有非抽象方法

②接口中的属性都是常量,修饰符都为public  static  final,无法被更改,抽象类中属性非常量

③一个类只能继承一个抽象类但可以实现多个接口


抽象类
抽象类的子类
接口

9.多态

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作 。

如何实现多态?

①必须要有继承关系

②子类要重写父类的方法

父类引用要指向子类对象!(上转型)


10.重要关键字

①this和super

this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题;this可以调用成员变量,不能调用局部变量;this也可以调用成员方法,但是在普通方法中可以省略this,在构造方法中不允许省略,必须是构造方法的第一条语句。,而且在静态方法当中不允许出现this关键字。

super代表对当前对象的直接父类对象的引用,super可以调用直接父类的成员变量(注意权限修饰符的影响,比如不能访问private成员)

super可以调用直接父类的成员方法(注意权限修饰符的影响,比如不能访问private成员);super可以调用直接父类的构造方法,只限构造方法中使用,且必须是第一条语句。


②final、finally、finalize

final修饰符(关键字),如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承例如:String类、Math类等。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重写,但是能够重载。 使用final修饰的对象,对象的引用地址不能变,但是对象的值可以变!

finally,在异常处理时提供 finally 块来执行任何清除操作。如果有finally的话,则不管是否发生异常,finally语句都会被执行。一般情况下,都把关闭物理连接(IO流、数据库连接、Socket连接)等相关操作,放入到此代码块中。

finalize,方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要清理工作。finalize() 方法是在垃圾收集器删除对象之前被调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。 一般情况下,此方法由JVM调用,程序员不要去调用!


③static关键字的作用

static可以修饰变量、方法、代码块和内部类static属性属于这个类所有,即由该类创建的所有对象共享同一个static属性。可以对象创建后通过对象名.属性名和类名.属性名两种方式来访问。也可以在没有创建任何对象之前通过类名.属性名的方式来访问。

1.在内存中份数不同不管有多少个对象,static变量只有1份。对于每个对象,实例变量都会有单独的一份static变量是属于整个类的,也称为类变量。而非静态变量是属于对象的,也称为实例变量

2.在内存中存放的位置不同,static关键字修饰的存在于堆中的方法区中的常量区中,所有对象共享,而非静态的每存在一个对象,在堆中便对应有一块内存

3.static修饰的变量,可以通过对象名.变量名访问(不推荐),一般通过类名.变量名访问


许多不足之处欢迎指正,大家一起共同进步!


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容

  • 玮莲 清明后的又一次冷空气席卷着大地,天地万物又瑟缩在风中,春寒料峭意犹未尽,浸骨的凉,洞穿身躯。夕阳润染着漫天的...
    骄阳下的一朵莲阅读 674评论 2 5
  • 《腾讯传》是吴晓波写的第一本企业传记,这本书沿用了他写商业史一贯的写作风格,从腾讯创业开始,选择了腾讯发展史上的一...
    晓蕊阅读 143评论 0 0
  • 那么为什么我总是提倡每个人都是一本书呢? 其实从成长的角度来看,我希望能够有一本属于我们每个人自己的书,而这本书终...
    王立登阅读 940评论 1 14
  • 六点半的夕阳 逐渐进入梦乡 星星点点的枝叶 迷红无际的天空 装饰了你我之梦 几许人家相望 几许山高水长 远方的你 ...
    番茄土豆泥阅读 477评论 2 5
  • 今天和蒋先生分别的时候,他叮嘱了我好几句路上注意安全,然后站在对面看着我过了马路才离开。我眼睛的余光看到了这些,我...
    Carolyn兮阅读 153评论 0 0