Java小白学习笔记

Java特点:继承、抽象、封装、多态

Java基本数据类型:

byte,short,int,long,float,double,char,boolean共8种byte

有效位1字节,short有效位2字节,int有效位4字节,long有效位8字节,float有效

位4字节,double有效位8字节,char有效位2字节,boolean有效位1字节

Java标示符组成:

类名,接口名,枚举名采用驼峰命名,每个单词首字母大写

StudentAge

变量名和方法名采用匈牙利命名,从第二个单词首字母大写studentAge

常量名全部大写,单词组合使用下划线连接

包名和工程名全部小写

一种是自动转换:从小的数据类型到大的数据类型,从子类到父类。

一种是强制转换:从大的数据类型到小的数据类型,从父类到子类。

注意:

byte+byte=int   short+short =int   byte+short=int   char+char =int

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的

类的实例,返回 boolean 的数据类型。

严格来说,instanceof 是 Java 的一个二元操作符(双目运算符),类似于 ==,>,

< 等操作符。用来测试一个对象是否是为一个类的实例,

用法为:boolean result = obj instanceof class

其中 obj 为一个对象,Class 表示一个类或者一个接口。

当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结

果result 都返回 true,否则返回false。

注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报

错,如果不能确定类型,则通过编译,具体看运行时定。

Java多态的实现具有三种充要条件

· 继承

· 重写父类方法

· 父类引用指向子类对象

向上转型:通过子类对象(小范围)转化为父类对象(大范围),这种转换是自

动完成的,不用强制。

向下转型:通过父类对象(大范围)实例化子类对象(小范围),这种转换不是

自动完成的,需要强制指定。

继承:

子类继承了父类,就继承了父类的方法和属性,子类不能继承父类中私有的(private)的成员变量方法

方法重载:在同一个类中方法只能被重载,不能被重写

方法重写:只存在子类与父类中(包括直接父类和间接父类)

组合:

组合创建整体类实例时,必须创建其所有局部类的实例,而对于继承,创建子类实例时,无须创建父类的实例

接口与抽象类:

·接口不能被实例化,所以接口中不能有任何构造方法,你定义构造方法编译会出

·接口的实现比如实现接口的全部方法,否则必须定义为抽象类

在抽象类中,具有如下特征:

·如果一个类中有抽象方法,那么这个类一定是抽象类,也就是说,使用关键字

abstract 修饰的 方法一定是抽象方法,具有抽象方法的类一定是抽象类。实现类方法中只有方法具体的实现

·抽象类中不一定只有抽象方法,抽象类中也可以有具体的方法,你可以自己去选

择是否实现这些方 法。

·抽象类中的约束不像接口那么严格,你可以在抽象类中定义构造方法、抽象方法

、普通属性、方 法、静态属性和静态方法

·抽象类和接口一样不能被实例化,实例化只能实例化具体的类

区别:

  1. 抽象类和接口都不能直接实例化。如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

2、抽象类要被子类继承,接口要被类实现。

3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。

4、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

区别与联系

1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的),所有的成员方法都是abstract的。
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是“is-a”关系,interface表示的是“has-a”关系。

    4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值,抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
6.接口中的方法默认都是 public,abstract 类型的。

  结论:
abstract class 和 interface 是 Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概 念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系(虽然都能够实现需求的功能)。这其实也是语言的一种的惯用法,希望同学们能够细细体会。

static关键字:

·在Java类中声明变量、方法和内部类时,可使用关键字static做为修饰符。

·static标记的变量或方法由整个类(所有实例)共享,如访问控制权限允许,可不

必创建该类对象而直接用类名加‘.’调用。

·static成员也称类成员或静态成员,如:类变量、类方法、静态方法等。如果想让一个类的所有实例共享数据,请用类变量(static关键字)

static与abstract不能连用

因为static修饰的方法是静态方法,其可以直接被类所调用。而abstract

修饰的方法为抽象方法,即无方法体的方法,不能够被直接调用需要在子类或实现

类中去编写完整的方法处理逻辑后才能使用。

静态方法中调用非静态成员不成立

这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使

用,而静态方法在使用前不用创建任何对象

栈内存:使用完会释放内存资源

堆内存:堆内存中分配的内存需要程序员手动释放

堆内存和栈内存的区别如下:

1、定义不同:堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允

许程序在运行时动态地申请某个大小的内存空间。栈内存在函数中定义的一些基本

类型的变量和对象的引用变量都在函数的栈内存中分配

2、特点不同:堆内存实际上指的就是优先队列的一种数据结构,第一个元素有最高

的优先权;栈内存实际上就是满足先进后出的性质的数学或数据结构。栈内存是存

取速度比堆要快,仅次于寄存器,栈数据可以共享。

3、范围不同:堆内存中分配的内存需要程序员手动释放,如果不释放,而系统内存

管理器又不自动回收这些堆内存的话动态分配堆内存,那就一直被占用。栈内存中

为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所

分配的内存空间,该内存空间可以立即被另作他用。

克隆:

1.浅克隆:只复制基本类型的数据,引用类型的数据只复制了引用的地址,引用的对象并没有复制,在新的对象中修改引用类型的数据会影响原对象中的引用。

2.深克隆:是在引用类型的类中也实现了clone,是clone的嵌套,复制后的对象与原对象之间完全不会影响。

3.使用序列化也能完成深复制的功能:对象序列化后写入流中,此时也就不存在引用什么的概念了,再从流中读取,生成新的对象,新对象和原对象之间也是完全互不影响的。

4.使用clone实现的深克隆其实是浅克隆中嵌套了浅克隆,与toString方法类似

//实现Cloneable接口,重写Clone()方法,如果是深克隆,引用类型的实例类也要实现Cloneable接口,并重写Clone()方法

public class Teacher implements Cloneable

private Student student;//Teacher类引用类型

@Override
	protected Teacher clone(){
		Teacher teacher = null;
		try{
			teacher = (Teacher)super.clone();
			//手动赋值实现深克隆
			//teacher.setStudent(this.getStudent().clone());
			
			teacher.student=(Student)student.clone();
			//return teacher;
		}catch(CloneNotSupportedException e){
			e.printStackTrace();
		}
		return teacher;
	}

Comparable自然排序:

·实现Comparable<T>接口public class Book implements Comparable<Book>

重写compareTo()方法实现自然排序(this在前:降序    this在后:升序

@Override
//	public int compareTo(Book o) {
//		int num =(int) (this.price-o.price);
//		int num2 = num==0?this.name.compareTo(o.name):num;
//		return num2;
//	}



TreeSet<Book> ts = new TreeSet<Book>(new Comparator<Book>() {

			@Override
			public int compare(Book b1, Book b2) {
				int num = (int) (b1.getPrice() - b2.getPrice());
				int num2 = num == 0 ? b1.getName().compareTo(b2.getName()) : num;
				return num2;
			}

		});

反射:

Java 反射机制是在程序的运行过程中,对于任何一个类,都能够知道它的所有属性和方法;对于任意 一个对 象,都能够知道调用它的任意属性和方法,这种动态获取信息以及动态调用对象方法的功能称为 java 语言的反射机制。

Java 反射机制主要提供了以下这几个功能 :

-在运行时判断任意一个对象所属的类

-在运行时构造任意一个类的对象

在运行时判断任意一个类所有的成员变量和方法

-在运行时调用任意一个对象的方法

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值