前言:自从出生,每个人都是一个学习者或探索者。永远保持一颗谦逊的心态,遵循一定的方法和规范,去学习和实践,永远记得走走停停,多回头看看自己走过的路,温故而知新,也能更好地指导未来的路怎么走(同样,本篇文章也会根据知识的完善和技能的提升而不断更新)。
如需更多Java、Python、大数据体系知识,请移步个人技术文档:https://anxiangchegu.github.io/technical-doc
目录
一、Java简介
一、Java简介
1、Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论允许程序员以优雅的思维方式(思想很重要)进行复杂的编程。
2、Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、动态性特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
3、Java三大体系:
Java SE(J2SE)
Java EE
Java Me
二、Java的主要特性
1、java语言是简单的:java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符承载、多继承、自动的强制类型转换,尤其是,Java语言不使用指针,而是引用。并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
2、Java语言是动态的:Java语言的设计目标之一就是适应于动态变化的环境,.Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入动态的类,这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行类型时候的检查。
3、Java语言是面向对象的:Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字implements),Java语言全面支持多动态绑定,而C++语言只对虚函数使用动态绑定。Java是一个纯面面对象设计的程序语言!
4、Jva语言是多线程的:在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建,通常有两种方法来创建线程:第一、使用型构为Thread(Runable)构造子将一个实现了Runnable接口的对象包装成了一个线程。第二、从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。注意Thread类已经实现了runnable接口,因此任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制,Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
5、Java语言是分布式的:Java语言支持Internet的应用开发,在基本的Java应用编程接口中有一个网络应用编程接口(Java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
6、Java语言是高性能的:与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器的技术发展越来越接近C++。
7、Java语言是健壮性的:Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择,Java的安全检查机制使得Java更具健壮性。
8、Java语言是解释型的:Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码文件进行解释执行,执行过程中需要的类在连接阶段被载入到环境中运行。
9、Java语言是安全的:Java通常被用在网络环境中,为此Java提供了安全机制,以防恶意代码的攻击。除了Java具有的许多安全特性以外,Java对通过网络环境下载的类具有一个安全防范机制(类ClassLoder),如分配不同的名字空间,以防替代本地的同名类、字节码检查,并提供安全管理机制(SecurityManager),让Java应用设置安全岗兵。
10、Java语言是可移植的:这种移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现 的,Java的运行环境是用ANSI C实现的。
11、Java语言是体系结构中立的:Java程序(后缀名为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀名为class文件),然后可以在实现这个Java平台的任何系统中运行,这种途径适合于异构的网络环境和软件的分发。
三、Java三大特性
封装、继承和多态。
1、封装:在Java中,封装是由类(Class)实现的。把现实生活中某一实体抽象成类,且该类包括属性(Type)、方法(Method),如把“学生”抽象成类,“学生”类有对应的属性name、age和方法study。(对于Java中的类,每个类中都可以有属性和方法,类属性又叫做成员变量)
public class Pserson{
private String name; // 属性
private int age; // 属性
public void eat(){ // 方法
}
}
2、继承:继承描述的是一种类与类的关系,比如学生是属于人的范畴,Student类(子类)继承Person类(父类),Student类就被称为是Person类的子类(或派生类),Person类就是Student类父类(或基类)。
public class Pserson{
private String name; // 属性
private int age; // 属性
public void eat(){ // 方法
}
} // Student类继承Person类
public class Student extedns Pserson{ }
3、多态:多态是同一个行为具有多个不同表现形式或形态的能力。多态有引用多态(父类引用指向子类对象)和方法多态(子类重写的方法或继承自父类的方法)两种,多态可以消除类型之间的耦合关系。
(1)多态存在的三个必要条件:继承、重写、父类引用指向子类对象。
(2)多态的实现方式:重写、接口、抽象类和抽象方法。
四、Java的基础语法
1、基本概念
(1)对象:是类的一个实例,有状态和行为。如:学生是一个对象,他的状态有:身高、体重、肤色、年龄等;行为有:吃饭、学习、玩耍和睡觉等。
(2)类:类是一个模板,它描述一类对象的行为和状态。
(3)方法:方法就是行为,一个类可以有很多方法,逻辑运算、数据运算以及所有动作都是在方法中完成的。
(4)实例变量:每一个对象都有特定的实例变量,对象的状态由这些实例变量的值决定。
2、基本语法
(1)大小写敏感:在Java语言环境里,是对大小写敏感的。标识符Hello和hello是不同的表示。
(2)类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,则后面每个单词的首字母大写。
(3)源文件名:源文件名必须和类文件名相同,当保存文件的时候,应该使用类名和文件名保存(切记Java是大小写敏感的语言),文件名的后缀是.java。
(4)主方法入口:所有的Java程序由public static void main (String [ ]args)方法开始执行。
强调:为了码出高效,码出质量——推荐阅读学习《阿里巴巴Java开发手册(终极版)》。
3、标识符
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
注意:
(1)所有的标识符都应该以字母(A~Z或a~z),美元符($)、或者下划线(_)开始;
(2)首字符之后可以是字母(A~Z或a~z),美元符($)、或者下划线(_)的任何字符组合;
(3)关键字不能用做标识符;
(4)标识符是大小写敏感的。
4、修饰符
(1)访问控制修饰符:default,public,protected,private;
(2)非访问控制修饰符:final,abstract,strictfp。
5、变量
(1)局部变量;
(2)类变量(静态变量);
(3)成员变量(非静态变量)。
6、接口
接口就是对象之间相互通信的协议。接口只定义派生要用的方法,但是方法的具体实现完全取决于派生类。
7、枚举
枚举限制变量只能是预先设定好的值。枚举可以单独声明或者声明在类里面,方法、变量和构造函数也可以在枚举中定义。
8、数组
数组是存储在堆上的对象,可以保存多个同类型变量。
五、面向对象
面向对象编程的三条主线:
(1)类及类的构成成分属性、方法、构造器、代码块、内部类;
(2)面向对象的特征:封装性、继承性、多态性(抽象性);
(3)其它的关键字:this\super\package\import\static\final\abstract\interface
1、基本定义
(1)类:对事物、逻辑、算法或概念的抽象。描述一类对象的行为和状态。
(2)对象(实例):对象是类的一个实例(对象不是找个男或女朋友),有状态和行为。
(3)引用:Java中一切都”看作“对象,但操纵标识符实际是指向一个对象的“引用”(reference)。
(4)构造方法:新建对象时,执行的一个特殊方法。在创建一个对象的时候,至少要调用一个构造方法,构造方法的名称必须与类同名,一个类可以有多个构造方法。
(6)this:这个关键字必须放在非静态方法里面,this关键字代表自身,在程序中主要有三个用途:使用this关键字引用成员变量;使用this关键字在自身构造方法内部引用其它构造方法;this关键字代表自身类的对象。
(7)方法重载(overload):就是方法名相同,方法参数的个数和类型不同函数。Java的重载是发生在本类的,前提条件是本类中存在多个同名不同参的方法。
(8)抽象类:抽象方法必须用 abstract 关键字进行修饰,如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须用abstract关键字修饰,抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
public abstract class ClassName {
abstract void fun(); // 抽象方法
}
(9)接口(Interface):极端的抽象类,在结构设计中用于解耦合。接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
2、内部类
每个内部类都能独立地继承一个(接口的)实现,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。内部类可以用多个实例,每个实例都有自己的状态信息,并且与其它外围对象的信息相互独立。(详细参考 :http://cmsblogs.com/?p=63)
(1)非静态内部类:非静态内部类依赖于外部类对象存在,在非静态内部类中,不能定义非静态成员;
(2)静态内部类:使用static 修饰的成员内部类,称之为静态内部类,静态内部类只能访问外部类的静态成员;
(3)局部内部类:声明在方法内部的类,局部类型只能在局部使用,但它的实例可以转为父类型传递出去。
注意:不可以修饰任何访问权限修饰符;不可以直接访问局部变量(方法的参数等效于局部变量);如果一定需要访问,则需要使用final对局部变量进行修饰。
(4)成员内部类:在类(外部类)的内部,且与外部类的成员是“同一级别”的。
(5)匿名内部类:直接创建已知类的子类对象,则该对象的类型就是匿名内部类。
技术文档体系已经独立维护
如需更多Java、Python、大数据体系知识,请移步个人技术文档:https://anxiangchegu.github.io/technical-doc