Java基础 原创
#Java基础
##面向对象和面向过程的区别
面向过程 :面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。
面向对象 :面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能一般比面向过程低。
面向过程:强调的是过程,也就是,每一步都需要自己来实现。
面向对象:强调的是对象,也就是,使用封装的对象,帮我们完成具体的功能。
#Java基础语法
##java的特点
> Java语言是简单的
1、Java语言是由C和C++演变而来,使得大多数程序员很容易学习和使用。
2、对C++来说进行了简化和一定的提高,如:使用接口代替了复杂的多重继承以及取消了指针;
3、通过实现垃圾自动回收机制,大大简化了程序员的资源释放管理工作。
4、提供了丰富的类库和API文档,以及第三方开发包工具包,还有大量的基于Java的开源项目以供学习。
> Java语言是面向对象的
面向对象就是Java语言的基础,也是Java语言的重要特性。面向对象是指以对象为基本单元,包含属性和方法。对象的状态用属性表达,对象的行为用方法表达。
Java语言是一个纯面向对象的程序设计语言。
> Java语言是分布式的
1、分布性主要包括两大方面,分别是操作分布和数据分布,其中操作分布指的是在多个不同的主机上布置相关操作,数据分布是将数据分别存放在多个网络中不同的主机上,借助的是URL(统一资源定位符)访问网络对象,访问方式和访问本地系统相似。
2、Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
> Java语言是多线程的
多线程机制使应用程序在同一时间并行执行多项任务,Java语言提供多线程之间的同步机制,这些相应的同步机制可以很好的保证不同线程,能够正确的共享数据。多线程机制使程序具有较好的交互性和实时性。
> Java语言是高性能的
Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU的机器代码,也就是实现全编译了。
与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
> Java语言是跨平台的
所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。这是软件发展的趋势和编程人员追求的目标。之所以这样说,是因为计算机硬件的种类繁多,操作系统也各不相同,不同的用户和公司有自己不同的计算机环境偏好,而软件为了能在这些不同的环境里正常运行,就需要独立于这些平台。
在Java语言中,Java自带的JVM虚拟机很好地实现了跨平台性。Java源代码经过编译后生成二进制的字节码是与平台无关的,Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够Write once, run anywhere(一次编译,到处运行)的原因。Java虚拟机提供了一个字节码到底层硬件平台及操作系统的完整方法,使得Java语言具备跨平台性。
> Java语言是可移植的
可移植性来源于跨平台性性,Java规范还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
> Java语言是安全的
在Java语言中删除了类似于C语言中的指针和内容释放等语法,有效的避免了非法操作内存,代码要经过校验之后才能够运行,所以未经允许的Java程序不可能出现损害系统平台的行为。
> Java语言是健壮的
Java语言的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
> Java语言是动态的
Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类,这也有利于软件的升级。
Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
==================================================================
##java的三大特征
Java面向对象的三大特征:
封装、继承、多态
> 1)封装
1、将对象的属性和实现细节隐藏起来,只提供特有的公共的方法。保证了程序的安全性和功能的稳定性。
2、便于设计者使用,提高了代码的复用性。将某一功能,属性抽离出来,独立写成单独的方法或类。设置访问权限可以限定该功能或属性可以被特定的访问者访问,保证了程序的安全性和功能的稳定性。
> 2)继承
继承是从已有的类派生出新的类,新的类能继承已有类的数据属性和行为,并扩展新的功能。
1、父类具备的方法子类可直接继承过来,不用重新写,提高了代码的复用性;
2、让类与类之间产生了关系,有了关系才有了多态的实现。继承是多态的前提。
3、java支持单继承,因为多继承存在安全隐患(当多个父类存在相同功能时,子类不确定要运行那个),java支持多层继承,即父类还可以继承其他的类。java用多实现机制解决了单一继承的问题。
> 3)多态
多态就是指多种状态,允许不同类型的子对象对统一方法做出不同的响应。
在Java中,实现多态的方式有两种,一种是编译时的多态,另外一种是运行时多态,编译时的多态是通过方法的重载实现的,而运行时多态是通过方法的重写实现的。
overload重载:同一个类中,方法名相同,方法参数列表、返回值可以不同。
override重写:子类中,重写父类的方法,什么都不能改变。
### 五大基本原则
1、单一职责原则SRP(Single Responsibility Principle)
类的功能要单一,不能包罗万象,什么都有。
> 2、开放封闭原则OCP(Open-Close Principle)
一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改不可以。
> 3、里式替换原则LSP(the Liskov Substitution Principle LSP)
子类可以替换父类出现在父类能够出现的任何地方。
.> 4、依赖倒置原则DIP(the Dependency Inversion Principle DIP)
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
就是你出省要说你是xxx省,而不能说你是哪个村的。比如说xxx省是抽象的,下面有具体的xxx市,xxx县,xxx镇,xxx村的。你要依赖的是抽象的xxx省,而不是你是xxx村的。
> 5、接口分离原则ISP(the Interface Segregation Principle ISP)
设计时采用多个与特定功能类有关的接口比采用一个通用的接口要好。就比如一个手机拥有打电话,看视频,听音乐等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。
==================================================================
## 数据类型
java有八大基本数据类型
整数类型:byte、short、int、long、char、
浮点型:float、double、
布尔型:boolean。
byte 1个字节 范围:-2^7~2^7-1
short 2个字节 范围:-2^15~2^15-1
char 2个字节
int 4个字节
long 8个字节
float 4个字节
double 8个字节
> 包装类
每一个基本数据类型提供与一个包装类,首字母大写,如byte的包装Byte(也就是一个class类)。
> 类型的转换
Java内字符编码是Unicode的,class文件采用utf8的编码方式,jvm运行时采用utf16。
boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换)否则将编译出错。
byte型不能自动类型提升到char,char和short直接也不会发生自动类型提升(因为char是无符号的,会出现负数的问题),但是byte当然可以直接提升到short型。
两个数值进行二元操作时,会有如下的转换操作:
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
==================================================================
## 访问修饰符
### 访问控制修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。
public : 对所有类可见。使用对象:类、接口、变量、方法。
protected : 对同一包内的类和所有子类可见。使用对象:变.量、方法。不能修饰类(外部类)。
default (即默认): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 不能修饰类(外部类)
### 其他修饰符修饰符
> 修饰符final:
修饰类:最终类,最终类不能被继承。
修饰方法:用final修饰的方法不能被继承,不能被重写,但是可以重载。
常量:定义局部常量用final,定义全局常量用static final (或者final static)。
> 修饰符static:
修饰类:可以修饰内部类修饰属性:static可以修饰任何属性。
修饰方法:不能修饰抽象方法,不能修饰构造方法。
修饰代码块:被修饰的代码块叫静态代码块。
> 修饰符abstract
修饰类(是抽象类):抽象类不能被实例化。抽象类是用来被继承的。
修饰方法(抽象方法):修饰的方法叫做抽象方法,只有方法的声明,没有方法的实现。
不能修饰:不能修饰属性、私有方法、构造器、静态方法、final 方法。
> 修饰符synchronized
synchronized 关键字声明的方法同一时间只能被一个线程访问。
synchronized 修饰符可以应用于四个访问修饰符。
> 修饰符transient
序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
> 修饰符volatile
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。一个 volatile 对象引用可能是 null。
==================================================================
##运算符
> 位运算符
二进制运算
运算符|运算符|结果说明
-----| ----
&| 按位与
/ | 按位或
~ | 按位取反
^| 按位异或
“<<” | 左移
“>>” | 右移|右移,正数高位用0填充,负数高位用1填充
“>>>” | 无符号右移|右移,高位用0填充
#面向对象(上)
面向对象程序 OOP(Object Oriented Programming)使用对象class来映射现实生活中的一切事物,即一切皆对象,把一切东西看成是一个个对象。
使用对象来封装现实生活中的事物,包括他的属性如名字,年龄,颜色等可以用成员变量来记录;行为可以用方法来实现。
使用对象的关系,来描述事物之间的关系,这种思想就是面向对象。
面向过程:强调的是过程,也就是,每一步都需要自己来实现。
面向对象:强调的是对象,也就是,使用封装的对象,帮我们完成具体的功能。
> 面向对象的好处:
1、将复杂的事情简单化;
2、符合人们的思想习惯(懒人思想);
3、将程序员由执行者变成了指挥者。
4、面向对象的三大特征:封装、继承、多态;
> 类与对象的关系
什么是类?
类是一种抽象的很泛的概念,是事物的属性和行为的一种集合。
例如:动物类,植物类,汽车类。。。
什么是对象?
对象就是指某一类事物的具体实现。
例如:动物类(猫、狗、猪。。。)
没有更多推荐了 [去首页]