当前位置:  编程技术>综合
本页文章导读:
    ▪当前不会命中断点,源代码与原始版本不同,解决办法      重新生成,重启VS2010,重启电脑,都不起作用,快气死我了。把当前文件用记事本另存成unicode编码的 ,就可以了或者:Ctrl+A全选,然后在文件菜单:file->advanced save options ,在弹出的选项.........
    ▪深入子类和父类        Java学习的第二篇总结!——子类和父类 深入分析,希望大家多多支持!       从内存角度去分析代码,可以从本质上理解一门语言!   子类从父类继承分成两种:     1.方法的继承: 方法.........
    ▪基于Weblogic8的JMS队列实例配置      预计达成目标:Weblogic8下实现消息的异步传输与监听   为了实现不间断发送与监听,使用了Quartz自动调度,这个不是这篇文章重点,不做讲解,也可以将quartz去掉 quartz引用的jar包比较多,这.........

[1]当前不会命中断点,源代码与原始版本不同,解决办法
    来源:    发布时间: 2013-11-10
重新生成,重启VS2010,重启电脑,都不起作用,快气死我了。

把当前文件用记事本另存成unicode编码的 ,就可以了
或者:Ctrl+A全选,然后在文件菜单:file->advanced save options ,在弹出的选项中选择新的编码方式为:UNICODE codepage 1200 ,点击确定,问题就解决了 



岁月漫步 2013-01-08 12:52 发表评论

    
[2]深入子类和父类
    来源:    发布时间: 2013-11-10

 

Java学习的第二篇总结!——子类和父类 深入分析,希望大家多多支持!    

 

从内存角度去分析代码,可以从本质上理解一门语言!

 

子类从父类继承分成两种:

 

 

1.方法的继承:

方法的继承,父类直接把自己的方法转移到子类中去,当然前提是父类的方法修饰符的访问范围是子类可以访问的范围,但是如果子类已经重写了父类的方法,这时候这个方法就不能重父类转移到子类中。

 

 

2.成员变量的继承 :

成员变量就会有点奇妙了,它不会从父类转移到子类,而是保留在父类中,这就会出现,子类和父类可能同时拥有两个相同名字的变量。

 

下面用一段代码来说明这种相对比较复杂的关系:

 

 

 

package com.text;

public class Test {

	public static void main(String[] args) {
		Father a = new Father();
		Chilren b = new Chilren();
		Father c = new Chilren();
		a.getAge();
		System.out.println(a.age);
		b.getAge();
		System.out.println(b.age);
		c.getAge();
		System.out.println(c.age);
	}
}

class Father {
	int age = 40;

	public void getAge() {
		System.out.println(age);
	}
}

class Chilren extends Father {
	int age = 18;

	public void getAge() {
		System.out.println(age);
	}
}

 输出

40
40
18
18
18
40

 

 

前四个结果可以理解,但是最后两个结果有人可能会问为什么结果会不一样,这段代码就体现了,成员变量继承和方法继承的区别。

 

 

可以得出结论: 

Father c = new Chilren();

 在以上父类引用指向子类对象情况下,访问变量看的是引用类型,所以c.age是父类的成员变量,而c.getAge()访问到的是子类Chilren的方法,所以在这个方法中用到的age变量是Chilren的变量

 

 

反正一句话,访问变量看声明,访问方法看实际对象类型(new出来的类型)

 

 

接下来对代码做部分修改

 

public static void main(String[] args) {

		Chilren b = new Chilren();
		Father c = b
		System.out.println(b.age);
		System.out.println(c.age);
	}

 

输出
18
40

 

     b 和c 两个引用都是指向内存中同一个对象,但是打印出来的结果却是不同,这就说明了,内存中保存了两个 age的值,一个是18 一个是40 。

 

     这里就会产生一些疑问,在内存中他们是怎么存储的?这时候会想到有个super关键字,通过super. 可以访问到父类的变量和方法,这里有人会说:“super.代表的就是一个父类对象,因为他指向父类”  之前我也是这么想,但是看过一些书后知道其实不是这样

 

      其实super.不是“东西”,说道super.自然会想到this.,有人把他们归为同类,其实他们大大不同

 

this:是一个真真实实对象,代表的就是当前对象,可以用 return this;  去返回一个对象。

 

super:不能一个对象,不是指向父类对象的意思,super只是修饰了他后边的内容,告诉JVM,后面这部                          分内容不是当前对象所属类的内容而已,若用return super,JVM是不允许的,是一种错误的语法。

 

 

		Chilren b = new Chilren();
		Father c = b

 回归到上面这段代码,这里并不是说内存中有两个对象 b 和 c ,内存中其实就只有一个 b对象 ,只是c 不仅有自己的实例 变量,同时也存在父类所定义的全部实例变量。

 

        所以可以得出结论:在实例化一个子类的同时,系统会给子类所有实例变量分配内存,也会给他的父类的实例变量分配内存,及时父子类中存在重名的实例变量,也会两个都分配内存的,这个时候子类只是隐藏了父类的这个变量,但还是会给它分配内存,然后可以用super来访问属于父类的变量。

 

 

 


 



已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—




    
[3]基于Weblogic8的JMS队列实例配置
    来源:    发布时间: 2013-11-10

预计达成目标:Weblogic8下实现消息的异步传输与监听

 

为了实现不间断发送与监听,使用了Quartz自动调度,这个不是这篇文章重点,不做讲解,也可以将quartz去掉

quartz引用的jar包比较多,这里就不作为附件了,只上传jms需要依赖的jar包 ,其中还有weblogic.jar,太大了就没有上传,可以在weblogic的安装bin目录下找到. 

 

配置步骤

一、建立 Weblogic Domain:建立步骤不再累述

二、在Console控制台配置连接工厂与消息队列

      1、配置连接工厂 

        

  按如下路径点击:Service—>JMS—> Connection Factories,在右侧弹出的页面,点击链接“Configure a new JMS Connection Factory...”,在新页面中输入Name及JNDI Name,此处两处均输入连接工厂名为:jms/connFactory,点击“Create”则生成JMS连接工厂

    如下图:

    

 

 

 

       2、配置消息队列

      如下图位置配置队列,这个jmsServer是自己建立的

 

        

 

 

到此位置就配置了一个 名称为 jms/connFactory   的连接工厂以及名为 queueasd 的队列

 

 

三、消息发送测试类

 

package com.javasd.jms;

import java.util.Properties;

import javax.jms.BytesMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;

import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

public class TestJmsConnection implements Job {
	
	public static void main(String args[]) throws Exception {
		
		//quartz调度,不做讲解
		SchedulerFactory schedFact=new StdSchedulerFactory();
		Scheduler sched=schedFact.getScheduler();
		sched.start();
		
		
		JobDetail jobDetail=new JobDetail("a","b",TestJmsConnection.class);
        jobDetail.getJobDataMap().put("name","lucy");
       
        CronTrigger trigger=new  CronTrigger("c","d");
        trigger.setCronExpression("0/100 * * * * ? " ); // 启动之后立即执行 每一秒继续重复。
        sched.scheduleJob(jobDetail, trigger);
			
		
	}

	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		
		try{
			
			
			//这里才是jms发送端的逻辑
			Properties properties = new Properties();
			//设置连接属性
			//这个设置是固定的
			properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
			//设置端口及IP 我的domain在本地,端口为9001
			properties.put(Context.PROVIDER_URL, "t3://localhost:9001");
			//与weblogic的console用户名密码一致
			properties.put(Context.SECURITY_PRINCIPAL, "weblogic");
			properties.put(Context.SECURITY_CREDENTIALS, "weblogic");
			//实例化上下文
			Context ctx = new InitialContext(properties);
				
				//获取连接工厂
				QueueConnectionFactory queueFactory = (QueueConnectionFactory)ctx.lookup("jms/connFactory");
				//根据连接工厂获取连接
				QueueConnection queueConn = queueFactory.createQueueConnection();
				//根据连接获取操作的session实例
				QueueSession qSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
				//通过上下文jndi查找配置的队列,我配置的队列名称及jndi名称均为 queueasd
				Queue queue = (Queue)ctx.lookup("queueasd");
				//通过session以及指定的队列实例化消息发送器
				QueueSender queueSender = qSession.createSender(queue);
				//打开连接
				queueConn.start();
				
				//测试用要发送的字符串
				String s = "just test sending of jms under weblogic8!";
				//转换为byte数组
				byte[] bytes = s.getBytes();
				int byteLength = bytes.length;
				//通过session的createBytesMessage方法实例化一个jms识别的消息实体对象
				BytesMessage bytesMessage = qSession.createBytesMessage(); 
				//为这个message对象设置值
				//设置消息的长度
				bytesMessage.writeInt(byteLength);
				//设置消息的内容
				bytesMessage.writeBytes(bytes);
				//发送消息
				queueSender.send(bytesMessage);
		} catch(Exception e ){
			e.printStackTrace();
		}
		
		
	}
	
	
	
}

 

        

 四、消息接收类

package com.javasd.jms;

import java.util.Properties;

import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;


public class TestJmsReceive implements Job{

	public static void main(String args[]) throws Exception {
		
		try{
			//quartz
			SchedulerFactory schedFact=new StdSchedulerFactory();
			Scheduler sched=schedFact.getScheduler();
			sched.start();
			
			
			JobDetail jobDetail=new JobDetail("a","b",TestJmsReceive.class);
            jobDetail.getJobDataMap().put("name","lucy");
           
            CronTrigger trigger=new  CronTrigger("c","d");
            trigger.setCronExpression("0/5 * * * * ? " ); // 启动之后立即执行 每一秒继续重复。
            sched.scheduleJob(jobDetail, trigger);

			
			
		} catch(Exception e){
			
		}
		
	   
		
	    
	    
		
	}

	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		
		//与sender中的定义一样,在实际应用中可以考虑单独讲这些设置为静态变量
		Properties properties = new Properties();
		properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
		properties.put(Context.PROVIDER_URL, "t3://localhost:9001");
		properties.put(Context.SECURITY_PRINCIPAL, "weblogic");
		properties.put(Context.SECURITY_CREDENTIALS, "weblogic");
		
		
		Context ctx = null;
		QueueConnection qConn = null;
		QueueConnectionFactory queueFactory = null;
		QueueSession qSession = null;
		Queue queue = null;
		
		QueueReceiver qreceiver = null;
		try {
			ctx = new InitialContext(properties);
			queueFactory = (QueueConnectionFactory)ctx.lookup("jms/connFactory");
			qConn = queueFactory.createQueueConnection();
			qSession = qConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
			queue = (Queue) ctx.lookup("queueasd");
			//从这里开始与sender有差别
			//用指定的队列构造Receiver
			qreceiver = qSession.createReceiver(queue);
			//为这个receiver设置监听器MessageListener,使用的内部类
			
			qreceiver.setMessageListener(new MessageListener() {
				public void onMessage(Message msg)  {
					//如果接收到的消息是byte类型的message,可以使text等类型,这个可以自己尝试
					if(msg instanceof BytesMessage){
						//转换为jms识别的消息对象
						BytesMessage bytesMessage = (BytesMessage)msg;
						try {
							int length = bytesMessage.readInt();
							
							byte[] bytes = new byte[length];
							//获取传送过来的消息
							bytesMessage.readBytes(bytes);
							//将消息进行展现
							String s = new String(bytes);
							System.out.println(s);
							
						} catch (JMSException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						
					}
					
				}
		}
);
			//开启连结进行监听
			qConn.start();

			
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	    
	}
}

 

 

这样就完成了一个最基本的JMS消息发送以及接收的测试实例,在实际项目应用中项目组用到的jms对连接池

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3