javaSE那些过去的事情

笔记-------
1.while 循环 先判断条件 条件为FALSE时  代码一次都不执行 


2.如果希望代码至少执行一次 ,则使用do while


3.swich多重条件语句  


4.处理大数值  可以使用Java.math包中的 bigInteger  bigDecimal


5.Arrays里面的方法 也很有用 如 toString(array a) 可以直接打印数组  sort可以快速排序


6.int[]a=new int[] {1,2,3,4}


int[]a={1,2,3,4}; 都可以创建 数组并赋值


java中的数组长度可以为0   区别于null  


7.java没有多维数组     多为数组 被解释为 数组的数组


还存在一种不规则数组


8.封装 表面上来看 是将属性(实例域)和方法(操作数据的过程)组合在一起,并对对象的使用者隐藏了实现方式。通过方法去操作属性,每个对象都有特定的一组实力域值,这些值得集合就是对象的当前状态,仅能通过对象的方法与对象属性进行交互,给对象赋予黑盒的特征,提高安全性和重用性。外在的调用者只要可以调用方法与数据交互,不会在意内部的实现方式


9.在Java中,可以通过扩展来创建一个新类  新类中只需要有自己的新的属性和方法,这种方式叫做继承。






10.对象的状态(属性)并不能完全描述一个对象,即使两个对象属性(状态)完全一样,也不能说这两个对象是相同的。如两个订单的属性完全相同,但是这两个订单不是同一个订单。也就说,每个对象的标识永远是不同的


11.对象的状态影响着行为,如 一个订单的状态为 “已付款”“已发货”,那么就应该拒绝调用修改订单中属性 的方法。同样,如果订单为空,那么状态(属性)也不能直接就是已发货






12.对象之间的关系 存在  :依赖(use a) 聚合(has a)  继承 (is a)






如果一个类的方法 操作另一个对象  那么,我们就说这个类依赖于另一个类,这种依赖关系应该尽可能降低,因为 如果A不知道B类 那么B类发生任何变化都不会影响到A  反过来  B的改变则可能使A产生Bug  这就是所谓的解耦合


聚合 ,也可以说是关联   一个对象里有一个或多个另一个对象  这种就叫做聚合 (或者关联)


如果A继承B  那么 A里面可以只有一些特殊的属性和方法  其他的可以从B里获取 


13.这里提到一个UML  统一建模语言   绘制类图


14.预定义类 如 Math   


15.  public int compareTo(Date anotherDate) {
        long thisTime = getMillisOf(this);
        long anotherTime = getMillisOf(anotherDate);
        return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1));


    }


这里出现的是三元表达式套三元表达式   实现了比较出现的 大于 等于 和小于 三种结果   






16.new Date() 里面 调用了另一个方法Date(long ..)给当前对象赋值为当前时间 ,通常我们创建一个对象 可以多次使用 ,因此需要一个变量去接收   Date  date =new Date();


对象变量和对象 有着区别,对象变量可以引用对象,但是如果只是声明   ,那么将无法使用对象的任何方法  否则报错


可以 用新构造的对象初始化  也可以引用一个已经存在的对象   Date a=new Date()  


b=a;


一定要认识到 一个对象变量 并没有实际包含一个对象  仅仅是引用 ,任何对象变量的值都是对储存在另一个地方的一个对象的引用,new对象时 返回的也是一个引用,而这个引用存储在对象变量中






17.GregorianCalendar  继承 Calendar     后者更实用    Date类中有getMonth()等方法  但是不推荐使用  当设计者认为某些方法不应该存在时  就标记为不推荐使用,虽然有些不推荐使用的方法仍然能使用  但是 在未来的类库版本中,很有可能被删除


GregorianCalendar a=new GregorianCalendar(2018, 4, 11);


System.out.println(a.get(Calendar.MONTH));// GregorianCalendar 比Date类方法多很多,可以结合Calendar使用


GregorianCalendar可以设计出日历 corejava  中4.2.3里有代码


除了get() 还可以 结合Calendar 进行set()


18.get  set 方法  :get是返回属性    set 是 对属性就行修改    那么 java中 ,访问属性的被称为 访问器方法  ,修改属性的 成为 更改器方法   ,通常习惯的在访问器方法前加get  ,在 更改器方法前加set   于是就有了 get  set 






19.当一个类被初始化时,会将里面的块内的代码先执行 ,等同于在构造方法里执行初始化  


如果想初始化一些属性,可以在构造方法内初始化,也可以 写块  如:static{name="张三"}


20.import static java.lang.System.*;  import 除了可以导入包,还可以静态导入  ,这样 System.out.print 就可以不加前缀System 直接 out.print。这样写法 代码清晰度不够高 


如果同一个类位于两个包  并且都要使用 可以 在每个类名前面加上包名 


java.util.Date date=new java.util.Date()    ;  java.sql.Date date1=new java.sql.Date();






21.java中 java.awt包中 有些类  如Window  你可能没有用过


22.如果将一个包密封起来 就不能再向包里添加类了






23.如果父类和子类拥有同一个方法,而子类需要调用父类相同的方法时  ,如父类中有获得奖金Money的方法,子类中也有获得奖金的方法 但是子类中的方法 需要获取初始化的奖金 再加上自己的算法得出子类对象的奖金,所以需要通过调用父类的访问器方法 获取属性奖金的值,再计算,此时 需要super.父类方法()


同时,super还具有调用父类构造器的功能 ,如果 子类 有参构造器调用父类的构造器  使用super()---省略父类名,如果没有指定调用父类构造器  则调用父类默认的无参构造器  ,如果父类没有无参构造器  则报错


23.javadoc注释中 @See  @Link  等的用法


24.类的设计 一定要属性私有化   尽可能不要多的使用基本类型     可以用一个对象 代替 原有的基本类型(对象类包含基本类型变量)如 类Perple中有对象的街道 门牌号 城市   可以将这三个属性抽取出来  组成一个 Address类  ,引入Perple中

25.java.awt.Window中的   String warningString   并不是private  也就是 在 awt包中 都可以访问  这个 至今依然没有修正 

而且JDK1.2之前,用户可以写java.lang  java.awt。。。这一类的包 然后就可以访问到java.lang包内部了  1.2开始,明确禁止加载用户自定义的 以java.开头的类



26.这里出现一个继承层次的概念 :由一个公共的超类派生出来的所有类的集合

继承链:从某个特定类到其祖先类的路径

java不支持多继承   多继承的实现用到了接口 

是否符合is -a 关系   是继承设计的标准  如果一个对象也是超类的对象   就可以考虑继承

26.重载解析的概念,静态绑定的概念  动态绑定的概念

27.如果定义类的时候不想被继承 ,则使用final修饰,如果超类中的方法不想被覆盖  则也可以用final修饰

如果类被定义被final 则方法也自动成为final   但是 属性不会

28.类型强转只能在继承层次内进行转换  转换之前 Instanceof判断

29.java中的protected要比C++ 中的安全性差   是指 不仅子类可以访问  同一个包的其他类也可以访问

30.Object  equals  可以比较两个对象是否指向相同引用   如果其中一个有可能为Null  可以使用 Objects.equals(a,b)

如果都不为null   a.equals(b)

31.equals()具有:

自反性   对于任何非空引用A   A.equals(A)为true

  对称性  当且仅当X.equals(Y) 为true,  Y.equals(X)也应该为true

一致性  如果 X Y 没有发生变化   ,那么反复调用X .equals(Y)返回结果也应该是一样的

传递性X.equals(Y) 为true,   Y.equals(Z) 为true,    那么  X.equals(Z)也为true, 

非空A .equals(Null)false


重写equals()方法时  推荐使用  入参 Object otherObject,与this==进行比较 

如果  属性 都一样  可以 用instanceof 转换  然后 与this的属性进行比较  比较规则可以自定义  

32.hashCode():散列码  由对象导出的一个整型值,散列码是无规律的

重写equals方法 必须重写hashcode方法   如果 equals中用id比较  那么 hashcode方法中散列码也要是Id生成的

如果X对象 和Y对象  equals比较是true  那么 X和Y的hashcode也必须是一样的

package com.jsdc.ybjava.ybjava;


import java.util.Objects;


public class Student {
private String name;
@Override
public boolean equals(Object obj) {
Student a=null;
if(obj instanceof Student) {
a=(Student)obj;
if(Objects.equals(this.name, a.name)) {
System.out.println("是同一个人");
}
}

return Objects.equals(this.name, a.name);
}






public int hashCode() {
// TODO Auto-generated method stub
return Objects.hash(name);
}






public static void main(String[] args) {
Student s1=new Student();
s1.name="1";
Student s2=new Student();
s2.name="1";
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());

}
}









































猜你喜欢

转载自blog.csdn.net/ajax_yan/article/details/79899433
今日推荐