JavaSE学习笔记(还算细吧QAQ)(一)

JavaSE学习笔记(一)

软件开发原则之一:开闭原则(OCP)

对扩展开放,对修改关闭。
在软件的扩展过程中,修改得越少越好。

面向抽象编程,不建议面向具体编程。

高手开发项目不是仅仅为了实现客户的需求,还需要考虑软件的扩展性。

基本数据类型分为4大类和8小种

第一类:整数型
	byte(1b),short(2b),int(4b),long(8b)(占用的空间大小不同)
第二类:浮点型
	float(4b),double(8b)(占用的空间大小不同)
第三类:布尔型
	boolean(1b)
第四类:字符型
	char(2b)

任何一个浮点型都比整数型空间大

float容量 > long容量

转义字符 ‘\’

如果想在控制台输出一个'\',则System.out.println("\\");
\t “制表符tab”
\n 换行

自动类型转换

小容量可以自动转换成大容量
	如:long a = 200;

强制类型转换

大容量强制转换成小容量,可能损失精度
	如:long x = 100L;
	    int y = (int)x;
	    将long类型强制转换成int类型,会自动删除前面4个字节。

如果一个整数没有超出2个字节的范围,可以直接赋值给char类型。

byte char short 在做混合运算时,各自先转换成int类型再做运算。
多种数据类型进行混合运算的时候,最终结果是最大容量的类型。

java 中规定,任何一个浮点型数据被默认为double来处理,
如果想让这个浮点型数据被当做float类型,需要在数据后面加上F/f,或者强制类型转换。

类型转换规则:

第一:八种基本数据类型中,除了Boolean类型不能转换,剩下七种类型之间都能进行转换。
第二: 如果整数型字面量没有超出 byte short char 的取值范围,可以直接将其赋值给 byte short char类型的变量。
第三:小容量想大容量转换称为自动类型转换,容量从小到大的排序为:byte < short(char) < int < long < float < double,
其中short和char都占用两个字节,但是char可以表示更大的正整数。
第四:大容量转换成小容量称为强制类型转换,编写时,必须添加“强制类型转换符”,但运行时,可能出现精度损失,谨慎使用。
第五:byte short char类型做混合运算时,各自转换成int类型再做运算。
第六:多种数据类型混合运算,各自转换成容量最大的那一种再做运算。
**所有的笔试题都超不出以上规则**。

算数运算符

当++出现在变量后,会先做赋值运算再进行自增。
当++出现在变量后,会先自增再赋值。

逻辑运算符:
	& 前条件为假时,后条件仍会执行
	&& 前条件为假时,后条件不会执行

JVM(java虚拟机)

主要的三块内存空间:栈、堆、方法区。
	方法区:类加载器classloader,将硬盘中的xxx.class字节码文件装载到JVM
	的时候,会将字节码文件存放到方法区中。也就是说方法区中存储的是代码片段。
方法区存代码
栈中存储方法执行时的内存空间以及局部变量。

堆内存中存储创建的对象。

方法重载(overlord)

什么时候考虑方法重载?
	在同一个类当中,如果多个方法的功能是相似的,
	那么可以考虑将它们的方法名一致,这样代码既
	美观又便于后期的代码编写(容易记忆,方便使用)。

什么时候代码会发生方法重载?
	在同一个类中
	方法名相同
	参数列表不同
		参数个数
		参数类型
		参数顺序
	只要同时满足以上3个条件,那么我们就可以认定方法和方法之间发生了重载机制。

方法重载和方法的返回值类型、修饰符列表无关。

面向对象

面向过程和面向对象有什么区别?
面向过程的开发方式主要特点是:
	注重步骤,注重实现这个功能的步骤。
	另外也注重实现功能的因果关系。
 面向过程的缺点:代码之间的耦合度太高,扩展力太差。
 面向过程的优点(快速开发):对于小型项目(小型功能),采用面向过程的方式,效率较高。

 什么是面向对象的开发方式?
 	采用面向对象的开发方式,更符合人类的思维方式。
	人类就是以“对象”的方式去认识世界的。
	所以面向对象更容易让我们接受。

	面象东西就是讲现实世界分割成不同的单元,然后每一个单元都实现成对象,
	然后驱动一下,让各个对象协作起来形成一个系统。

	采用面向对象的开发方式进行开发:
		耦合度低,扩展力强。

当我们采用面向对象的方式贯穿整个系统的话,涉及到三个术语:
	OOA:面向对象分析
	OOD:面向对象设计
	OOP:面向对象编程

leader 领导/经理/组长
team 团队
PM 项目经理 project manager

面向对象三大特征

封装
继承
多态

Java创建对象的几种方法

  • 使用new关键字
  • 使用反射机制
	// 使用Class类的newInstance方法
	Test test1 = Class.forName("com.xy.Test").newInstance();
	//或者
	Test test2 = Test.class.newInstance();
	//或者 使用Constructor类的newInstance方法
	//拿到Constructor构造器
    Constructor<Test> constructor = Test.class.getConstructor();
     //通过构造器的newInstance返回对象
     Test Test4 = constructor.newInstance();
  • 对象的clone()方法
    需要满足一下两点条件:
    1)、需实现Cloneable接口
    2)、覆盖clone方法
public class Test implements Cloneable{

        @Override
        protected Object clone() throws CloneNotSupportedException {
            return super.clone();
        }

        public Test(){

        }

        public Test(Context context){

        }
    }
  • 反序列化
			ObjectInputStream i = new ObjectInputStream(new FileInputStream(fileName));
            try {
                //通过readObject()方法返回对象
                Test test6 = (Test)i.readObject();
                i.close();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

java语言机制中,是靠什么来区分类的?

第一:首先通过类名进行比对。
第二:如果类名一样,靠序列化版本号进行区分。

序列化与反序列化

序列化:Serialize java对象存储到文件中。将java对象的状态保存下来的过程。
把对象转换为字节序列的过程称为对象的序列化。

反序列化:DeSerialize 将硬盘上的数据重新恢复到内存中,恢复成java对象。
把字节序列恢复为对象的过程称为对象的反序列化。

对象专属流

序列化流:ObjectOutputStream

反序列化流:ObjectInputStream

包装类型与基本类型的区别

Java基本类型

Java语言提供了八种基本类型。其中,六种数据类型(四个整数型,两个浮点型),一个字符类型,还有一个布尔类型

  1. 整数:short, byte, int, long,初始值为0
  2. 浮点型:float,double,初始值为0.0
  3. 字符:char,初始值为空格,即’’ "。如果输出,在console上是看不到效果的
  4. 布尔:boolean,初始值为false
包装类型

包装类型把基本类型转换为对象,每个基本类型在java.lang包中都有一个相应的包装类型
包装类型: Integer 、Long、Short、Byte、Character、Double、Float、Boolean、BigInteger、BigDecmail
其中BigInteger、BigDecimal没有相对应的基本类型,主要应用于高精度的运算。BigInteger 支持任意精度的整数,BigDecimal支持任意精度带小数点的运算,主要用于金钱的计算上。

区别
  1. 包装类型是对象,有方法和属性;而基本类型是数值
  2. 声明的方式不同,基本类型不像包装类型一样需要在堆内存中分配内存地址创建对象
  3. 初始值不同,包装类型初始值都为null
  4. 存储位置不同,基本类型将值存储在值栈中,包装类型将对象放入堆内存中,引用在栈中
  5. 包装类型可用于泛型
  6. 基本类型更加高效
    包装类型需要在堆内存中分配一块内存地址,还需要GC去回收。基本类型随方法结束直接释放掉。
  7. 包装类型可用于POJO中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值