极·Java速成教程 - (1)

序言

众所周知,程序员须要快速学习新知识,因此就有了《21天精通C++》和《MySQL-从删库到跑路》这样的书籍,Java做为更“高级”的语言也不该该落后,因此我就写一个《极·Java速成教程》,让想学的人可以快速学习Java(手斜)。
本文大概分三大部分:java

  • 编程基础知识
    • 面向对象思想
    • 数据类型
    • 运算符
    • 流程控制
  • Java语言特性
  • Java高级特性

本文请逐字理解文本内容,本文仅供理解和学习Java编程,不可做为概念性参考程序员

本文是阅读《Java编程思想》后的读后感编程

面向对象思想

何为面向对象

Java是一个从设计之初就遵循面向对象思想的语言,所以而有着诸多面向对象的特性,那么问题来了,面向对象指的是什么?
面向对象,不是指的脸超女友,而是说编程的时候,你所操做的一切事物都是“对象”,假如说Java程序员是个搬砖工,那Java操做的对象就是搬砖工手里的砖,一块砖就是一个对象,一堆转就是一堆对象,诸多一样的对象能够用一个概念来归纳,这个概念就是“”。
先在咱们能够思考砖是个什么东西,也就是砖的“概念(类)”:砖,由土烧制而成,能够用来砌墙、铺地和垫桌角,有必定的重量和体积,能被搬被砌。仔细分析这句定义,能够发现能分为4小句:数组

  • 砖是由土烧制而成。也就是说,一个类都是从另外一个或多个类继承发展而来,也就是“继承(extend)和组合自另外一个或多个类”,在Java中,全部类都继承和扩展自Object类,在本身写的程序中,一个类能够继承和扩展自官方的类,别人写的类和本身写的类。
  • 砖能够用来砌墙、铺地和垫桌角。也就是同一个类能够根据不一样的需求去加工处理,修改成不一样的“形状”,添加不一样的属性,在不一样的地方起到不一样的做用。
  • 砖由必定的重量和体积。也就是说每一个类都有其属性,可是对于同一种属性,他们的值未必相同,正如每一个砖的重量和体积均可以不一样。
  • 砖能被搬被砌。也就是说每一个类都有其功能,属性是一个类静态的描述,而功能(或者说方法)则是一个类动态的描述。

将许多个“砖”同样的对象搭配组合,堆垒到一块儿,就能够构建起程序的这栋房屋,实现总体的功能。函数

Java中类的几个特色

Java中的类有几个特色学习

  1. 单根继承,也就是说某一个类只能直接继承自另外一个类,就像砖只能由土烧制而成,即土→砖,然而除了土,砖的烧制过程当中还须要加其余的配料好比防火原料,也就是说除了直接继承,还能够添加其余类到一个类中,这种方法叫经过接口(interface)进行继承。
  2. 访问控制。对于一个类来讲,你只能看到一个类想让你看到的部分。就像一个砖,你只能看到砖的表面,不能看到它的内里,除非敲开他,可是在Java中,这是不被容许的。一个类想让你看到的部分和不想让你看到的部分由不一样的关键词进行控制:
    • public 对于全部对象都公开的内容
    • private 只有本身可见的内容
    • protected 只有本身和本身的子孙能够看到的内容
    • default 只有本身的亲戚(同一个包)能够看到的内容
      咱们不用关心他们内部什么样子,咱们只须要关心咱们须要的,暴露在外面的东西,以及对象能正常工做就行。
  3. “像”就是“是”。对于一个类来讲,若是长得像一个东西,那就能够看做是一个东西。就像儿子像父亲,父亲能干的儿子也能干同样,一块防火转是一个砖,那他也有砖的全部属性,也能被垒起来。而一个具备垒起来方法的对象看上去能垒起来,那他就能像砖同样被垒起来。
  4. static属性。对于一个类来讲,有的属性和方法能够是static也就是静态的,这种属性和方法不是描述一个类的对象的,而是描述一个类的。就好比能够对全部的砖执行统计数量操做,对于一个砖头让他统计同类的数量是不恰当的,可是对于一堆转,让这堆砖告诉你有多少块是可行的。
  5. 对象生命周期管理。Java语言的使用者不用关心Java对象是怎么诞生的,怎么消亡的,只须要在须要时new一下,建立一个对象便可,使用完之后的垃圾丢到哪里,那是Java高级特性须要研究的东西。
  6. Java中的类之上具备包(package)的结构,包是具备层次的,如java.lang.Math就表示java下的lang包下的Math类,这个层次结构能够有好多层,一层一层深刻,因此可能这个名字会很长。在使用某一个包中的某一个类的某些内容时,须要使用import进行导入,若是须要导入某个包下的所有,可使用通配符。,如java.lang.

Java编程须要关心的点

只要想好这个类和它的对象应该怎么设计,怎么正常运行便可,其余语言的包袱,甩掉便可设计

数据类型

一切都是对象,而根基只须要几个

当Java使用者须要一个对象时,这个对象在内存中的位置时咱们不用管也无法管的。但这个对象是怎么来的,倒是能够思考的。就像房子是砖垒成的,砖是由土烧成的,那土是什么构成的呢,这么追究下去,追究到最后就成了重子和轻子了,可是咱们没必要追求这么细,就像Java中咱们知道一切对象都有Object这个“祖宗”,可是咱们不须要凡事都请动这个祖宗,它有几个子女是咱们经常使用的,也就是“基本类型”:code

类型 大小 包装器 初始值
boolean true/false Boolean false
char 16 bit Character '\u0000'
byte 8 bit Byte (byte)0
short 16 bit Short (short)0
int 32 bit Integer 0
long 64 bit Long 0L
float 32 bit Float 0.0f
double 64 bit Double 0.0d
void Void void

这些基本类型的大小都与其位数n有关,最小值为-2n-1,最大值为2n-1-1,float和double遵循IEEE754标准。
除了基本类型,还有字符串String,高精度整数BigInteger和高精度浮点数BigDecimal等常见类。对象

对象应当被管理

一个对象,给他个称号,就能够根据这个名字喊他作各类事,就像家里人能够喊你小名让你干活同样。可是当出了家里,可能有好多人跟你重名,这会带来困扰,所以是不被容许的,而在外面叫你的小名,这也会带来尴尬,也就是说,这个名字超出了做用域,在Java中,一个称号(或者说引用)的做用域是从这个命名的声明到所在花括号的结尾。固然若是不关心这一点也没问题,由于IDE会提醒你这里出了问题。
当一个对象有了它的称呼之后,就能够安排他作好多的事情了,不管谁喊,只要是喊到,就能够用。在做用域范围内的全部调用均可以经过这个名字实行,而你也能够再给这个对象起另外一个名字,这多个名字都是指的同一个对象,当处理不当时,这会带来一些问题,好比一个喊你张三的人给你图了个花脸,别人喊你李四把你喊过来之后也会看到一个花脸。
对于一堆相同类型的对象,能够用一个容器装住他们,方便咱们管理和使用,Java中提供了多种类型的容器,有最基本的数组,也就是一串连续的空间去装同样的对象,还有其余的诸如set和map之类的容器能够装,这一点能够在后面进行详细讨论。继承

运算符

运算符按照字面语义理解就好

运算符有其优先级,也有短路的特征。优先级就是说先乘除后加减,短路就是逻辑运算时当直接能够产生结果时就再也不继续运算。
运算符有如下几个:
+。加号,数字的累加,字符串的链接,将较小类型的数字提高为int类型。
-。减号,数字相减。负号。
*。乘号,数字相乘。
/。除号,数字相除,给出结果的整数部分,直接截断小数,不会四舍五入。
%。求余,数字相除求余数。
++自增,--自减,当出如今对象前面时先运算再输出值,当出如今对象后面时先输出值再运算。
>,<,>=,<=。大于,小于,大于等于,小于等于。顾名思义。
==判断相等,对于Java来讲,这是容易令人困扰的一点,由于除了在判断基本类型对象是否相等时之外,==仅仅为判断别名所指向的对象是否为同一个,而不关心对象的属性是否相等。若是要判断String等官方封装好的类型,就要用到equals()方法,可是对于本身定义的类来讲,若是没有从新定义equals()方法,就会和==同样,对引用对象进行判断,而不是对对象的属性进行判断。
&&,||,!。逻辑运算符与或非,对boolean值进行判断,两边都true时&&结果为真,两边有一个为true时||结果为真,!是对boolean对象的逻辑值进行颠倒。
&,|,^,~。按位操做符,对数字类型进行按位的与,或,异或和非操做,与,或,异或是对两个对象进行操做,非是对一个对象进行操做。
<<,>>,>>>。移位操做符,就是将操做数按位进行移位,A※※B就是将A往箭头方向移B位。若是是负数,>>在左侧补1,>>>在左侧补0。
=。数字赋值,或者是给一个对象起别名,或者是将另外一个别名添加到一个对象上。
+=,-=,*=,/=,&=,|=,^=,>>=,>>>=,<<=。比较相似,a※=b就是a=a※b。当>>>=byte和short时,转化成int进行处理而后截断,可能产生不正确的结果。
指数计数法:AeB表明了Ax10B,如1.39e-43f表明float的1.39x10-43
?:。这是个三元运算符,如A?B:C就表示若是A的逻辑结果为真,就执行B,不然就执行C。
直接常量,就是直接的数,如200D,0x200。其规则是若是后面跟D表示double,F表示float,L表示long,前面跟0表示8进制数,0x表示16进制数。

操做符使用时容易出现的问题

类型转换

(A)B能够将B强制转化为A类型,若是是从较小的类型转化为较大的类型,将不会带来问题,但若是是从较大的类型转化为较小的类型,则会带来信息丢失的问题。自定义类的转换同理。

截尾和舍入

对于浮点数来讲,强制转化为整形时,会舍弃小数部分,若是要获取舍入的结果,须要使用java.lang.Math中的round()方法。

流程控制

Java是一种面向对象的语言,但其执行过程依旧时顺序的,在顺序执行的程序中,会进行一些选择分支和循环操做。

选择

Java中可使用if-else和switch进行分支选择。

if-else

形如

if(A){
    B
}else{
    C
}

就是若是判断条件A为真,则执行B,不然执行C。

switch

形如

switch(A){
    case 1: B;
    case 2: C;break;
    case 3: D;break;
    case 4: E;break;
···
}

即若是判断条件A为1,则执行B而后执行C而后中断该代码块,若是判断条件为2则执行C而后中断该代码块,若是判断条件为3则执行D而后中断该代码块,等等。

循环

循环有3种形式:while,do-while和for。

while

形如

while(A){
    B
}
对判断条件A进行判断,当判断条件为A时,屡次执行B代码。

do-while

形如

do{
    B
}while(A)

先执行一次B代码,而后对判断条件A进行判断,当判断条件A为真时,循环至花括号头部执行B代码。

for

形如

for(int i=0,j=0;i<100;i++,j++){
    B
}

首先对第一个;前面的部分执行,常见于循环控制对象进行初始化,多个对象可使用,进行区分,而后对;间的循环控制条件进行判断,若是条件为真则执行下方代码块,最后对;后的第三部分执行,好比对循环对象进行自增操做等。实例中就是先对i和j进行初始化为0,而后判断i是否小于100,若是为真则执行B代码,最后执行i自增和j自增,而后判断i是否小于100,若是为真继续循环,该代码最后将执行B代码段100次。
在编程时,循环常在数组等可迭代对象上进行。可迭代就是能够从前到后顺序走一遍。对此,Java提供了一些便利的语法方便开发。形如

容器 A;
for(int i:A){
    B
}

就是说对于容器A,迭代遍历一遍,i会在每次循环中引用到A中的每一个对象,而后执行B代码块。假如容器A中有100个对象,那B就会被执行100次。

返回

return

结束该语句所在函数,返回返回值。
返回值类型由函数定义决定,若是不匹配且没法兼容则会IDE报错。

Java的不同凡响

Java的流程控制中没有goto语句,可是经过break和continue语句,实现了从深层循环中跳出的功能。经过在循环前标记label:,而后使用break labelcontinue label,便可跳出循环到指定位置或者是跳出本次循环到指定位置。

label1:
while(true){
    label2:
    while(true){
        continue label1;//结束本次循环,跳转到外循环继续循环
        break label1://结束外层循环
    }
}

感慨

Java的基本语法,与其余的语言有类似之处,也有不一样之处,但编程原本就是一种实践的技能,纸上得来终觉浅,绝知代码要手撸,仍是实打实的写代码才能够将知识转化为能力。以及,文章真难写。

相关文章
相关标签/搜索