Android工作室开发学习笔记——2

本文详细介绍了Java基础知识及其在Android开发中的应用,包括Java的基本概念、对象存储方式、构造方法、static关键字的作用、初始化过程、访问权限修饰词、继承类初始化和装载顺序以及多态的概念。

安卓的很大一部分是Java,所以学好Java很重要。虽然现在可以用kotlin来编写安卓程序,但是毕竟是新东西,用起来谁知道会出什么问题,Java开发安卓已经这么多年了,他的根也那么深了,前人都已经做了那么多,我们当然也要用好轮子。

虽然大二这一年都学的是Java,但是进入工作室学习安卓,导师也会把Java的一些东西再给我们细讲一下。这一讲才发现,原来自己学的Java的基础知识太不牢固了。

1、A a = new A();这条Java语句的含义:

①左边那部分指的是声明一个叫a的对象;

②右边那部分指的是在计算机中分配一个内存空间(栈内存),并且初始化对象的成员;

③等于号指的是a变量指向所开辟的那个空间,即把对象的首地址赋给对象的引用变量。

2、对象的存储

内存空间分为堆和栈,当程序中发生方法调用时,为被调方法分配栈内存空间,用来存放被调方法的形式参数和局部变量。产生的对象放在堆里面

堆(Heap)      堆是个自由内存区域,常用于动态或临时内存分配,对类和数组对象提供内存。

栈(Stack)      栈存储方法调用的状态,如方法调用使用的任何局部变量和方法的操作数。

3、构造方法

①构造方法名与类名相同,并且是类的方法,不能通过对象引用来调用,创建一个类对象的同时,系统会自动调用该类的构造方法将新对象进行初始化。

②不能对构造方法指定类型,它有隐含的返回值,该值由系统内部使用;如果指定了类型,就不是构造方法。

③构造方法可以重载 ,可以定义多个不同参数的构造方法;构造方法可以继承。

④如果用户在一个自定义类中未定义该类的构造方法,系统将为这个类添加一个默认的空构造方法。构造方法与类的修饰符保持一致。

默认构造方法用默认值初始化对象的成员变量:

数值型            0    

boolean            false    

char            ‘\0’    

对象            null

自定义构造方法:构造方法格式    [修饰符] 类名 (参数列表) ,修饰符可以是public、protected、缺省、private之一, 构造函数没有返回值,不能加void。

4、static

用static 修饰符修饰的域变量不属于任何一个类的具体对象,而专属于类。

其特点为它被保存在类的内存区(堆)的公共存储单元中,而不是保存在某个对象的内存中。

一个类的任何对象访问它时,存取到的都是相同的数值。

声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。

用static修饰符修饰的方法称为静态方法,它是属于整个类的类方法,不属于类的任何对象。不用static修饰的限定方法,虽然在类中定义,但其实是为对象而定义。

static修饰的方法有如下特点:

①static方法是类方法,但可以被所有对象访问,引用这个方法时,可以使用对象引用做前缀,也可以用类名做前缀。

②static方法内部的代码,只能访问类中的static属性或方法,不能访问类中的非static属性或方法(属于对象的方法),但非static方法可以访问static成员或方法。

③main方法是特殊的静态方法。因为在程序开始执行时必须调用main() ,所以它被声明为static。

Static 变量优先于非Static 变量,不论出现顺序如何, Static {后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且是在类被第一次装载时。(Static(静态) 代码块)

5、初始化

成员初始化:

声明变量时未赋初值,自动获得一个缺省值。

一个变量本身是引用,初始化为得到为null ;一个变量是整形,初始化为得到 0 ;一个boolean, 初始化为得到false。

定义初始化:

定义数据成员的同时也为他其赋初值。

静态数据初始化:

静态数据成员只在这个类的第一个对象要创建的时候初始化。

初始化顺序:

① 定义初始化在先,构造函数在后

② 先做静态初始化、再做定义初始化、最后做构造函数

6、访问权限修饰词

public——对所有类可见

protected——对本包和所有子类可见

default(缺省)——对本包可见

private——仅对本类可见

7、继承类初始化和装载

初始化顺序:

① 先父类静态初始化,后子类静态初始化

② 先父类定义初始化、构造函数,后子类定义初始化、构造函数

例:

class Insect{
	int i=9; //3
	int j;
	Insect(){   //4
		prt("i="+i+",j="+j);
		j=39;
	}
	static int x1=prt("static Insect.x1.initialization"); //1
	static int prt(String s){
		System.out.println(s);
		return 47;
	}
}

public class Beetle extends Insect{
	int k=prt("Beetle.k initialized"); //5
	Beetle(){   //6
		prt("k="+k);
		prt("j="+j);
	}
	static int x2=prt("static Beetle.x2 initialized"); //2
	static int prt(String s){
		System.out.println(s);
		return 63;
	}
	
	public static void main(String [] args)
	{
		prt("Beetle constructor");
		Beetle b=new Beetle();
	}
}

static Insect.x1.initialization

static Beetle.x2 initialized

Beetle constructor

i=9,j=0

Beetle.k initialized

k=63

j=39

8、多态

Java中提供两种多态的机制: 编译时多态性(即重载overloading ) 运行时多态性(即覆盖overriding )

重载(overloading)

在一个类中定义多个同名而参数列表不同的方法,我们称这些方法是重载的。

参数列表不同: 数目不同 、类型不同、 顺序不同

在JAVA中,同名同参数但不同类型返回值的方法不是重载,编译不能通过。

覆盖(override)

方法的覆盖:方法名称相同、参数列表相同、返回类型相同

被final修饰的最终方法不能被覆盖

static方法只能覆盖为static方法,不能覆盖非静态方法, static方法也不能被非static方法覆盖。

子类的方法覆盖父类方法,必须提供与父类被覆盖方法相同或更大的访问权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值