JAVA,
JAVA,
Java语言之父-James Gosling(詹姆斯•高斯林 )
1991年Sun公司开发名为Oak的语言
1994年将oak语言更名为Java
Java变成语言的风格十分接近C++语言,继承了C++语言面向对象技术的核心,舍弃了C++容易引起错误的指针,改以引用替换,移除原C++与原来运算符重载,也移除了多重继承特性,改用接口替换。
太阳微系统对java语言的解释是:Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。
java语言特性:
- 面向对象
- 跨平台性
- 自动垃圾回收
命名规范
- 项目名称全部小写
- 包名全部小写
- 类名首字母大写,使用驼峰式命名
- 方法名/变量名首字母小写,使用驼峰式
java中的注释
- doc文档注释 /** */ 编译并生成帮助文档
- 单行注释 //
- 多行注释 /*...*/ 不能够嵌套
java中大小写敏感、区分大小写
java变量
java中的数据都是通过流流到内存中,通过cpu、各种解析器,完成各种效果。
变量相当于自然语言中的代词。
在Java中,每一个变量属于一种类型,声明变量时,变量所属的类型位于变量名之前,以分号“,”结束。
Java是强类型语言,在使用变量是有以下规则:
- 变量必须声明,并且初始化以后才能使用。
- 变量必须有明确的类型。
- 变量不能重复定义。
变量必须初始化才能使用,仅仅声明不叫初始化,初始化包括两部分:声明和赋值。
在使用变量时,如果只声明不赋值,会报编译错误。
The local variable name may not have been initialized;
局部变量可能还没有初始化。
变量的作用域:
在声明的地方开始,到块结束位置;离开变量的作用域结束,变量将回收
java数据类型
java中的数据类型,分为引用类型和基本数据类型。
八种基本数据类型
整型:byte short int long
浮点型:float double
字符型:char
布尔型:boolean
时间的底层是long类型
byte的取值范围 -128 - 127
包装类:
int Integer
double Double
float Float
char character
long Long
short Short
boolean Boolean
byte Byte
unicode包含ASCII
Integer底层为IntegerCache 取的是 byte的大小 -128-127 存放在字符串常量池中
类型转换
- 自动类型转换
正方向,小类型到大类型的转换会自动完成,自动类型转换也叫“隐式类型转换”,是自动发生的,一般不需要处理
浮点数到整数转换会损失精确度
- 强制类型转换
强制类型转换,也叫显示类型转换,是按照反方向进行的转换,这种转换会
溢出,或者损失精度,要注意数据的范围。
强制类型转换时,尽量规避边界数的风险
不同类型作运算
运算符
- 数学运算符(+ - x / %)
- 自增(自减)运算符(++ --)
- i++,后++,先将i的值作为整个表达的值,然后将i增加1
- ++i,先++,先将i的值增加1,然后将i的值作为整个表达的值。
- 逻辑与比较运算符
- 逻辑运算符(与&&或||非!)
- 短路运算符(&& ||)
如果条件1不成立,则条件2不执行
- 非短路运算符(& |)
两个条件都会执行
- 比较运算符(比较运算,比较变量的值,就是逐个“位”比较值)
> >= < <= == !=
基础数据类型比较,在内容上判断,可以直接使用“==”,如果不是基本数据类型,那么比较的是地址。
- 条件运算符(三元运算符、三目运算符、三目表达式)
条件表达式?表达式1:表达式2
常用于分页业务逻辑
int page = total%size ==0 ? total/size : total/size+1
分支流程控制
- if-else语句
- switch-case语句
switch(表达式){
case 条件1:
....;
break;
case 条件2:
......;
break;
default:
.......
break;
}
注:在使用switch时有如下注意点:
循环控制
- while循环
- do-while循环
- for循环
- for-each循环
数组
数组属于引用类型
内存
引用类型:堆放变量的内容,栈放变量的名字
查看数组内部的内容: Arrays.toString();
获取数组长度 arr.length
数组下标开始值为0 arr[0]
异常:
数组下标越界 ArrayIndexOutOfBoundsException
数组:
数组不适合做数据的更改,适合做数据的乱序随机访问。
传值:基本数据类型
传址:引用类型 ------- 数组 接口 类(包装类除外)
定义数组的三种方式:
可变参数:参数的长度可以不定
public static void show(String... arr)
数组排序
选择排序
原理:简单而言,每轮都找到最小的放到前面
- 将数组中每个元素与第一个元素比较,如果这个元素小于第一个元素,则交换这两个元素
- 循环第 1 条规则,找出最小元素,放于第 1 个位置
- 经过 n-1 轮比较完成排序
//使用第三方变量
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//不适用第三方变量
if(arr[i]>arr[j]){
arr[i] = arr[i] + arr[j];
arr[j] = arr[i] - arr[j];
arr[j] = arr[i] - arr[j];
}
冒泡排序
原理:
- 比较相邻的元素,将小的放到前面。
插入排序
数组对象的复制
int[] arr = new int[]{1,2,3,4}
int[] arr2 = arr1;
arr2[1] = 8888;//arr1[1]-->8888;
这种现象叫数组赋值,可是发现如果这样赋值,数组对象没有隔离性,不小心就修改了。
int[] arr3 = new int[arr1.length]
for(int i = 0;i<arr1.length;i++){
arr3[i]= arr1[i];
}
数组拷贝(复制)效率更高的2种方法:
System.arraycopy(src,srcPos,dest,destPos,length)
int[] src = {1,2,3,4}
int[] dest = new int[4];
System.arrcopy(src,0,dest,0,src.length)
5个参数分别代表的含义是:源数组、源数组开始复制的位置、目标数组、目标数组开始复制的位置、复制的长度
Arrays.copyOf(src,length)
int[] src = {1,2,3,4}
int[] dest = Arrays.copyOf(src,src.length);
方法重载 方法重写
成员变量只关乎数据的本身,而方法可以做附加值。
set get
this代表本地指向
LAMBOK:
CLASS_INSTANCE 类和实例化
CONSTRUCTOR 构造函数
encapsulate 封装
inheritance 继承
polymorphism 多态
annotation 注解
方法重载:
一个类中 同名的函数 目的一样 但结果有点不同 传参数不同
一个类中,方法名相同,参数类型不同,个数不同,顺序不同
可变参数:参数的长度可以不定
public static void show(String... arr)
方法重写(也可叫方法覆盖):
两个类中 发生继承
int a = 10;
int b = 10;
String c = 'H';
System.out.println(a+b+c); 20H
System.out.println(c+b+a); H1010
运算:不一定先运算,但一定先转型
构造函数(构造方法):
默认的初始构造函数,在new一个类的时候,实际上不仅仅做了一个开辟空间实例化的过程,还会默认去调用这个构造函数。这就代表这个实例在最初被调用被实例的时候的一种样貌,一种形态。在new的时候可以做很多的事情,来打造它最初的样貌。
构造方法没有返回值,方法名与类名一样,初始的时候,调用且只调用一次。改变构造函数,或重载多种构造函数,让我们的实例多样化。
对象(object)
object(对象)相当于中文语义“东西”
object 是指一个具体事物实例,比如飞机、狗、运气、哲学等看得见的,看不见的,有形的、无形的,具体的,抽象的都是对象,总之“一切皆Object”
面向对象
面向对象,是指面向客观事物之间的关系。人类日常的思维方式是面向对象的,自然界事物之间的关系是对象和对象之间的关系。
面向对象的定义:
首先,根据客户的需求抽象出业务对象;
然后对需求进行合理分层,构建相对独立的业务模块;
之后设计业务逻辑,利用多态、继承、封装、抽象的编程思想,实现业务需求;
最后通过整合各模块,达到高内聚、低耦合的效果,从而满足客户需求。
OOA 面向对象分析/OOD 面向对象设计
OOAD(Object Orient Analysis Design,面向对象的分析和设计,面向对象分析与设计)是现代软件企业广为采用的一项有效技术。OOAD 方法要求在设计中要映射现实世界中指定问题域中的对象和实体,例如:顾客、汽车和销售人员等。返就需要设计要尽可能地接近现实世界,即以最自然的方式表述实体。所以面向对象技术的优点即为能够构建不现实世界相对应的问题模型,并保持他们的结构、关系和行为为模式。
面向对象概念
- 类型(类) 指一个名词概念,如:客人、菜品、厨师
- 引用(变量) 指引用具体概念实例的代词,如:某人、特菜价
- 对象(东西) 指具体概念的个体实例
- 行为 方法 eat() sleep()
- 多态 行为或饮用,在具体情形下会发生变化的现象
- 封装 任何对象实例都是尽可能封装,减少暴露,它的实现细节对你是透明
- 继承 概念的继承关系
归类有两个特征:
1.是什么,用成员变量和属性来描述
2.具备哪些行为,用方法来描述
多个实例如何在内存中存储:
每个实例独有的特征,都会放到不同的堆空间,方法只在方法区存储一份。当出现多个对象时,方法拷贝只有一份。但为了体现不同实例之间的差别,存在了不同的对空间中,GC机制。当方法当中的局部变量会因为方法调用之后,生命周期的终止而进行自动的销毁,不走垃圾回收机制。但是这样的成员变量在不用之后,都会选择恰当的时机将它回收。
相关文章
- 暂无相关文章
用户点评