【名师课堂】Java面向对象开发

【名师课堂】Java面向对象开发

Java核心第二部
106课时 |
23947人已学 |
(24 评论)

加入学习
加入学习

最常用的三大设计模式:

工厂模式

单例模式

代理模式

[展开全文]

对象的产生分析

引用类型指的是内存空间的操作。

 现在的内存分为两块内存空间:

堆内存空间:保存真正的数据,堆内存保存的是对象的属性信息;

栈内存空间:保存的堆内存的地址,堆内存操作权,保存的是对象名称;

一个栈内存中只能够保存一个堆内存地址。

对象的产生实际上会有两种格式:

声明实例格式

分布式格式

对象(所有的引用数据类型)必须在其开辟空间之后才可以使用。如果使用了未开辟内存空间的引用数据类型,则将出现NullPointerException

只声明对象,并没有为其开辟堆内存空间,而 程序在编译的时候不会产生任何的语法错误,但是在检测的时候会出现如下错误提示:Exception in thread "main"java. lang.NullPointerException at TestDemo.main(TestDemo.java:12)-数字代表代码行数

只有引用数据类型(数组、类、接口)才会产生此类异常,以后出现了可以根据错误的位置观察该对象是否实例化。

 

 

[展开全文]
致知格物 · 2017-10-24 · 类与对象(对象内存分析) 0

代理模式:

一个接口,两个实现,其中一个实现是真实业务,另一个实现是辅助业务。

所有动作都由辅助代理,真实动作由真实业务发出。

然后利用代理工厂进行。

[展开全文]

接口之间也可以继承!

一个类只能extends一个父类,但可以implements多个接口。

java通过使用接口的概念来取代C++中多继承。

与此同时,一个接口则可以同时extends多个接口,却不能implements任何接口。因而,Java中的接口是支持多继承的。

引用自:-----http://www.cnblogs.com/littlepanpc/p/3616300.html

[展开全文]

public class TestDouble {

public static void main(String[] args) {

Double x=1.1;

Double y=1.1;

System.out.println(x==y);//不仅比较对象地址,也比较对象值

System.out.println(x.equals(y));//只比较对象值

}

}

 

[展开全文]
13liyunfei · 2017-07-22 · 包装类(装箱与拆箱) 0

单例设计模式

构造函数私有化

外部无法产生实例化对象,只能通过static关键字获得。

 

饿汉式----》推荐----线程安全。

懒汉式

[展开全文]

单例模式和多例模式很相似:

构造函数私有化

类内部一定会提供一个static方法来获得实例化对象

多例模式被枚举取代。

[展开全文]

数组基本概念

数组在开发之中一定会使用,但是像以下讲解的时候这么用的数组少了.在以后的实际开发之中,你们会更多的使用数组概念,而直接使用数组99%的情况下都只是做一个数组的for循环输出.

如果说现在要求你定义100个整型变量,那么按照之前的一个做法,可能现在定义的结构如下:

int i1,i2,i3....i100;

但是这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这100个变量的内容,意味着你需要编写System.out.println()语句100次。

所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身属于我们的引用数据类型,那么既然是引用数据类型,这里面实际上又会牵扯到内存分配,而数组的定义有如下两类。

 1. 数组的动态初始化:

  • 声明并开辟数组:
数据类型 [] 数组名称 = new 数据类型 [长度];
数据类型 数组名称 [] = new 数据类型 [长度];
  • 分布进行数组空间开辟(实例化)
//声明数组:
数据类型 [] 数组名称 = null;  //或者下面
数据类型 数组名称 [] = null; 

//开辟数组空间
数组名称 = new 数据类型 [长度];

那么当数组开辟空间之后,就可以采用如下的方式进行操作:

  • 数组的访问通过索引完成,即:数组名称[索引];但是需要注意的是,数组的索引从0开始,所以可以使用的索引范围就是 0~数组长度-1,例如:现在开辟了3个空间的数组,所以可以使用的索引是:0,1,2;如果此时数组访问的时候超过了数组的索引范围,则会产生"ArrayIndexOutOfBoundsException"异常信息;
  • 当数组采用动态初始化开辟空间之后,数组里面的每一个元素都是该数组对应数据类型的默认值;
  • 数组本身是一个有序的集合操作,所以对于数组的内容操作往往采用循环的模式完成,数组是一个有限的数据集合,所以应该使用for循环.
  • 在java中提供有一种动态取得数组长度的方法:数组名称.length;

范例:定义一个int数组

//开辟一个数组
public class Class15{
	public static void main(String args[]) {
		int data [] = new int [3];//开辟了一个数组长度为3的数组空间
		data[0] = 10;//第一个元素赋值
		data[1] = 11;//第二个元素赋值
		data[2] = 12;//第三个元素赋值
		//data.length 可以获取到该数组的长度
		for(int i = 0;i < data.length;i++) {
			System.out.println(data[i]);
		}
	}
}

数组本身除了声明并开辟空间之外还有另外一种开辟模式.

 

范例:采用分布模式开辟数组空间

//分布式开辟一个数组
public class Class16{
	public static void main(String args[]) {
		int data [] = null;//声明
		data = new int [3];//开辟了一个数组长度为3的数组空间
		data[0] = 10;//第一个元素赋值
		data[1] = 11;//第二个元素赋值
		data[2] = 12;//第三个元素赋值
		//data.length 可以获取到该数组的长度
		for(int i = 0;i < data.length;i++) {
			System.out.println(data[i]);
		}
	}
}

但是千万要记住,数组属于引用数据类型,所以在数组使用之前一定要开辟空间(实例化),如果使用了没有开辟空间的数组,则一定会出现NullPointException异常信息:

public class Class16{
	public static void main(String args[]) {
		int data [] = null;//声明
		System.out.println(data.length);
	}
}

这一原则和之前讲解的对象操作是完全相同的.

 

 

 

[展开全文]

1.用static修饰的内部类等同与外部类,其实例化的语法为:

  外部类.内部类 内部类对象 = new 外部类.内部类().

[展开全文]

授课教师

阿里云开发者社区全面升级
一站式体验,助力云上开发!
进入新社区

相关课程

查看更多 >

本课程相关云产品