一、面向对象的三大特征
分别是封装、继承、多态
二、封装
在面向对象的语言中,吧属性和方法放在一个类中,然后对类进行命名,以后通过类型来使用类。面向对象的设计五大原则SOLID中,又一个原则称为单一职责原则,因此,类的功能不是无限的。也就是每个类应该有它专门的职责。
每个类只能封装属于它自己应该具有的属性和方法。
封装可以更好的管理代码,也可以更好地实现功能的复用。
-
java中封装的实现。
在java中有一种特殊的类的设计方式,具有这种设计方式的类称为javaBean,javaBean的对象在项目中用来表示一个实体,他可以封装与实体相关的属性,也可以作为数据传送的载体。
-
javaBean的设计规则
(1)属性是是有的,不能再外部看见这些属性。也不能在外部操作使用这些属性。
(2)提供针对各个属性的公共的getter和setter方法,可以再外部调用这些方法操作属性。
(3)必须具有无参的构造方法。(和jvm有联系)
-
javaBean属性名的识别问题
属性名是方法名中后面的部分,把第一个大写改成小写就是属性名。比如getName().这里的属性名是name.原因在于JDK处理javabean时取属性名就是通过方法名去取的,而不是属性名
三、Random类
在java.util中,该类的实例用于生成伪随机数的流,也就是用它的对象来生成随机数。
- Random()创建一个随机数生成器
- public int nextInt(int bound)返回伪随机的,均匀分布int值结余0(含)和指定值(不包含)
- public double nextDouble() 从该随机数发生器的序列中0.0和1.0之间的double值
四、Scanner类
Scanner 类在java.util工具包中,一个简单的文本扫描器,用来扫描键盘输入缓冲区,因此在程序运行时可能用他的对象去接收用户通过键盘输入的数据。
- Scanner scanner=new Scanner (System.in) ;创建对象
- public String next ()返回输入的字符串
- public int nextInt ()返回输入的整数
五、Class ArrayList集合类
该集合内部有一个数组成员,放在集合中的元素其实就在该数组中,我们调用集合对象的方法来操作集合元素,其内部也就是对数组的各种操作,这些操作被集合类封装了。
-
public ArrayList()构造一个初始容量为十的空列表(数组的长度为十)。内部数组可变长度,也就是通过复制老的数组到一个更大的新的数组来改变数组的长度
-
集合中元素的类型只能是引用类型,不能是基本类型,如果确实需要添加基本类型的数据就添加对于的包装类型的对象
-
一般性的增删改查操作:
ArrayList list = new ArrayList(); //添加元素(集合中元素的类型只能是引用类型,不能是基本类型) list.add("qwe"); list.add("asd"); list.add("123"); System.out.println("元素总数:"+list.size()); //覆盖元素 list.set(1,"abc"); //删除元素 list.remove(0); list.add("456"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i));
六、final关键字
最终的,最后的定义。
作一个常用的关键字,主要用于成员变量,类,方法上面。
- 用final来修饰成员变量,该变量就是常量,所以它经常用来声明常量。
- 按照规定,类中的常量名称权用大写,最好加上static关键字以保证可以通过类来使用。
- 常量一旦赋值就不能更改。
- 如果用在类上,该类不能就继承,此类就是最终类。用在方法上,方法不能被重写。
七,String 字符串类
-
在程序中可以通过两种方式来创建字符串,一种直接赋值,一种是创建对象
String str1 = "abcd"; String str2 = new String("abcd");
-
字符串之间的比较
private final char value[];
value是数组,该数组就是用来存放字符串中各个字符的。
-
equals比较,也就是比较两个字符串中的value的值是否相等,也就是比较两个字符串中的值。
System.out.println(str1.equals(str2)); //调用方法比较对象,比较数组一样,所以值一样
-
==比较,用来比较两个字符串变量的值是否相等,也就是进行地址的比较
-
用赋值产生的字符串是常量,存放在常量池中。通过new创建的字符串不是常量(也包括使用Scnner输入保存的字符串!!).new常见的字符串存放在堆heap区是堆区中的一个对象。因此通过赋值和new出来的字符串一定不相等,他们是不同的对象
-
String str1 = "abcd"; String str3 = "abcd"; System.out.println(str1==str3); //两者引用的同一个对象
结果为true,这里采用了享元模式,如果两个字符串都是通过赋值产生的且值相等,那么他们就公用常量池中的同一份字符串,所以他们的地址是相同的。
-
String a="abc"; String b="ab"; String c="c"; System.out.println(a==(b+c));//结果返回false
在编译器,编译器发现是变量的操作,因此不会在常量池中为b+c的结果分配位置,在运行的时候才会分配新的空间
-
String a="abc"; System.out.println(a==("ab"+"c")); //返回true
编译在编译时就会在常量池中给表达式的值分配内存,为此值在前面已经分配,按照享元模式的要求,让表达式的值与a变量的值共享一个值
(因为已经有了的变量所以直接用,然后里面的地址一样的,所以)
- 要程序中不要频繁对一个字符串进行操作,因为字符串是常量不能在原值上进行修改,任何的改变都会常见一个新对象,如果任由其去操作,会造成内存溢出。
关于比较的其他参考博客:
涉及源码的:https://www.cnblogs.com/mic112/p/15474295.html
java中利用Scanner键入的字符串和其他字符串的比较:https://www.cnblogs.com/holab/p/8586872.html
其他:
//关于时间的试验
System.out.println("输出毫秒:"+System.currentTimeMillis());//查看时间(这里输出的是毫秒值)
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = dateformat.format(System.currentTimeMillis());
System.out.println("现在的时间是"+dateStr);
dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
long time = dateformat.parse("2021-11-16 16:03:17").getTime();
System.out.println(time);
} catch (ParseException e) {
e.printStackTrace();
}