先来一段简单的java代码
public class FirstSimple{
public static void main(String[] args) {
System.out.println("你是xxxx");
}
}
注意大小写,这是一个Java程序正确的结构
java /** **/自动生成文档
unicode打破传统字符编码机制
声明变量必须现实初始化
final关键字声明常量,一旦赋值不能继续更改 staic final 声明类常量
强制类型转换会造成精度丢失
String.join() 拼接字符串 字符串常量是最稳的
foreach 循环
int[] b = new int[100];
for (int element : b) {
System.out.println(element);
}
封装
保护对象实例域,提供黑盒的概念保护数据域的安全,体现了面向对象思想。数据>算法的思想
对象
使用面向对象编程清楚对象三个主要特征
- 对象的状态
对象的行为
对象的标识 - 面向对象编程不同于面向过程从设计类开始
3.类之间关系有依赖、聚合、继承 - 如果返回一个可变对象的引用,应该对它进行克隆
private Date hireDay;
public Date getHireDay(){
return (Date) hireDay.clone();
}
继承
java 子类数组的引用可以转换为超类父子的引用
- 包含一个或多个抽象方法的类必须被声明是抽象的,抽了抽象类和抽象方法,还可以包含具体数据和具体方法
- 抽象类不能被实例化
- 假如Person是抽象类,可以通过 Person p = new Student();p是抽象类的实力变量,其中student是抽象类的子类
- 子类扩展抽象类的一种方法通过实现部分抽象类的的子类其子类也必须是抽象类,另一种方法是全部实现抽象类的方法这样子类就可以不是抽象类
java中只有基本类型不是对象
object利用equals来检测对象的引用是否相等,这种判断并没有意义需要判断对象的状态是否相等。
- 需要重写equals方法来判断两个对象是否相等
public boolean equals(Object otherObject){
if(this == otherObject){
return true;
}
if(otherObject == null) return false;
if(getClass()!=otherObject.getClass()) return false;
Employee other = (Employee) otherObject;
return name.equals(otherObject.name) && salary ==otherObject.salary && hireDay.equals(otherObject.hireDay);
}
自己实现equals方法具有以下特性
- 自反性
- 对称性
- 传递性
- 一致性
- 对于任意
接口
如果遵循某个特定的接口,那么就履行某个特定的服务例如ArrayList可以利用sort进行排序,
但是要求对象不许实现comparable接口
public interface Comparable{
int compareTo(Object object)
}
// 任何实现Comparable接口的类都包含compareTo方法,并且这个方法的参数必须是一个Object参数
想要employee实现排序那门就必须将类实现给定的接口,对接口的所有方法进行定义。
public int compareTo(Object otherObject){
Employee other = (Employee) otherObj;
return Double.compare(salary,other.salary);
}
如果想做的更好可以为compareTo的参数设置范型
- 接口不能被实例化
- instance 检查某个对象是否实现了某一个接口,instanceof检查对象是否继承另一个对象。接口中可以定义静态常量但是尽量不要定义,接口可以被扩展
- 可以在接口中增加静态方法
变量作用域
- lambda 表达式可以访问变量外围的作用域
- lambda 表达式就是闭包
- lambda 表达式引用变量,并且这个变量可以在外部被改变,这是不合法的
- 不能在lambad声明和外部代码块相同的变量名
- 使用lambda表达式重要的一个点就是延迟执行
lambda表达式使用情况
- 在一个单独的线程中运行代码
- 多次运行代码
- 在算法的适当的位置运行代码
- 发生某种情况时运行代码嘛(点击按钮运行代码)
- 只在必要时运行代码
public static void repeat(int n,Runnable action){
for(int i = 0;i <n; i++){
action.run();
}
}
内部类主要原因有以下几点
- 内部类可以访问类内部的定义域包括私有数据
- 内部类可以对同一包中的其他对象隐藏起来
- 当定义一个回调韩硕不想写大量的代码,使用匿名内部类比较便捷
网友评论