整理知识笔记(6)--String,设计模式(单例、MVc)

1:String  字符串中“==”号是左右两个变量是否指向同一内存地址;“equals()”是指两个object是否一样;(所有成员的值都相同)   

String a= “abc”;

String b=”abc”;

a==b;//true

a.equals(b);//true

String a=new String (“abc”);

String b=new String(”abc”);

a==b;//false

a.equals(b);//true

“abc”是放在常量池中的,内存中只有一份副本,所以ab指向同一地址

new 方法决定了两个不同的String“abc”被创建放在了内存heap区,分别被ab所指向,所以==是false

String a= “abc”;///jvm先根据内容“abc”查找对象,如果没有找到,则在heap上创建新对象,在将其赋给s

String a=new String (“abc”);///jvm在heap上直接创建新对象,所以在heap中会出现内容相同而地址不同的String对象

 

2:Constant Pool常量池

在java编译好的class文件中,有个区域称为Constant Pool,他是一个有数组组成的表,类型为cp_info constant_pool[],用来存储程序中使用的各种常量。

String pool是对应于Constant Pool中存储的String常量的区域;对于相同的常量,Constant Pool只会创建一个;

在程序执行过程中,Constant Pool会存储在Method Area中,而不是在堆中;对于“”的空字符串也会创建一个长度为0内容为空的字符串;且Constant Pool在运行状态是可以扩展的。

例:

String s=new String(“aabb”);///使用new创建一个新对象存在heap中。吧引用返回,与Stringpool无关

s=s.intern();///调用此方法,如果stringpool以及包含相同字符串,就会返回池中的字符串,否则就会将String对象添加到池中,并返回此对象在stringpool中的引用

String s1=new String(“bb”);

String s2=”aabb”;

String s3=”aa”+”bb”;//s2=s3

String s4=”aa”+s1;///因为s1是常量,在编译期间不能确定特的值,所以会在执行的时候会创建一个新string对象存储在heap中然后赋值s4;  所以s2!=s4   但是s2=s4.intern()

 

3:String s1=”abcdefg”;  s2=s1.substring(3,5);///java的substring是前包括后不包括的,所以s2=de

数组不能直接指定行数和列数:如int aa[3][4];是错误的;应该在创建对象时定义:如int aa[][]=new int[3][4];

 

4:StringBuffer

public static void main(String[] args){

StirngBuffer a = new StringBuffer("A");

StirngBuffer b = new StringBuffer("B");

operate(a,b);

System.out.println(a+","+b);

}

void operate(StringBuffer x,StringBuffer y){

x.append(y);  y=x;

}

///输出的结果为AB,B

 

5:String对象与变量的区别:

String A=”a”;///此处创建一个对象和一个引用A   1

String B=“b”;/// 1

A=A+B;///此处创建了一个对象,并由引用A来引用,那么A原来指向的对象就成为了垃圾对象,被回收  1

StringBuffer D =new StringBuffer(”abc”);//此行产生两个对象,abc与new创建出来的     1

D=D.append("123");///4-5行都是对同一对象进行处理,字符串本身就是对象,所以有两个  1

1)引用变量与对象:A aa;声明了一个A类的引用变量,而对象一般通过new创建;而D仅仅是一个引用变量,他不是对象,而“abc”本身就是一个Stirng对象;

2)

String a=”aa”;

String b=”aa”;

///在pool中创建一个对象:aa   

String a=new Stirng(”aa”);

String b=new Stirng(”aa”);

//在pool中有一个对象,heap中有两个(aa本身就是pool的一个对象)两个new就有两个heap中的

 

6:设计模式:

Singleton模式主要作用是保证java程序中,一个类class只有一个实例存在。Singleton模式通常有两种形式:

第一种(饱汉):定义一个类,构造函数为private;它有一个static的private变量,在初始化时就实例化;通过一个public的方法获取该对象的引用;

public class Singleton{

private Singleton(){}//private的构造方法,只供内部使用

private static Singleton instance = new Singleton();//一个static private的变量,同时实例化

public static Singleton getInstance(){//供外部访问class的静态方法,可以直接访问

return instance;

}

}

第二种(饥汉):改进上一种方法,不用每次都进行生成对象,只是第一次;使用时生成实例,提高效率

public class Singleton{

private static Singleton instance = null;

public static synchronized Singleton getInstance(){

if(instance==null)

instance= new Singleton();//不用每次都进行生成对象(new)

return instance;

}

}

更实际的应用(在什么情况用单例)
public class SequenceGenerator{
//下面是该类自身的业务功能代码
private int count = 0;
public synchronized int getSequence(){
++count;
}

//下面是把该类变成单例的代码
private SequenceGenerator(){}
private final static instance = new SequenceGenerator(); public static SingleTon getInstance(){
return instance;
}

}

7:struts下的MVC模式:

MVC模式(mode是应用对象     view是界面显示    controller定义用户界面对用户输入的响应方式)

Model是应用程序的主要部分,model表示业务数据或者业务逻辑;view是应用程序中用户界面相关的部分;controller是根据用户的输入控制用户界面数据显示和更新model对象状态;

MVC模型实现了功能模块与显示模块的分离,同时他还提高了应用系统的可维护性、可扩展性、可移植性、组件的可复用性

Model:即处理业务逻辑的模块,每一种处理一个模块;
View:负责页面显示,显示 MODEL 处理结果给用户,主要实现数据到页面转换过程;
Control:负责每个请求的分发,把 FORM 数据传递给 MODEL 处理,把处理结果的数据传递给 VIEW 显示。

MVC 的各个部分都有那些技术来实现?如何实现
MVC 是 Model - View -Controller 的简写。Model 代表的是应用的业务逻辑(通过JavaBean,EJB 组件实现), View 是应用的表示面(由 JSP 页面产生),Controller 是提供应用的处理过程控制(一般是一个 Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

1:B/S与C/S的联系与区别:

 

C/S是client/Server的缩写,是客户机与服务器结构的应用程序;服务器通常采用高性能的PC、工作站、或小型机;并采用大型数据库系统如oracle、SQL server等;客户端需要安装专用的客户端软件

B/S是brower/server的缩写,是浏览器和服务器结构的应用程序,即web应用程序;客户机需要安装浏览器,服务器需要安装oracle、sql server等数据库;浏览器通过webserver同数据库进行数据交互。

硬件环境不同

C/S一般建立在专业的网络上,小范围网络环境,局域网之间再通过专门服务器提供连接和数据交换服务。

B/S在广域网上,不必专门的网络硬件环境,例电话上网,有更强的适用范围,一般只要有操作系统和浏览器就行。

对安全要求不同

一般面向固定的用户群,对信息安全控制能力;可用于机密系统;

建立在广域网上,对安全控制能力,可能面对不知名用户。(可公开部分信息)

对程序架构不同

可以更加注重流程,可以对权限多层次校验,对系统运行速度较少考虑。

对安全及访问速度有多重考虑,建立在需要更加优化的基础上。

软件重用不同

需要整体性考虑,重用性差。

要求构件相对独立功能,能够较好重用。

系统维护不同

由于整体性,必须整体考虑,处理出现的问题以及系统升级较难;可能重新做一个新系统

可以个别构件更换,系统维护开销小。直接下载就可以升级

处理问题不同

可以处理用户面固定且在相同区域,安全要求高,与操作系统有关,应该都是相同的系

在广域网,面向不同的用户群,分散地域,与操作系统的关系小

用户接口不同

建立在windows平台上,表现方法有限难度高

建立在浏览器上,有丰富的表现方法和用户交流,难度低,开发成本低

信息流不同

一般是典型的中央集权的机械是处理,交互性低

信息流向可以变化,更像交易中心

 

猜你喜欢

转载自blog.csdn.net/qq_39667655/article/details/81843816
今日推荐