㈠ java 类型转换的原理是什么
java中的数据类型分为两种:基本类型、引用类型。基本数据类型没有什么好说的byte char short int long float double boolean,这些类型除了boolean之外,其他的与C语言中的类型没有太大的区别。因为这篇文章的论题是类型转换,所以在此不讨论boolean值的用法。下面要说的是引用类型。引用在有的书里也叫做句柄,它很类似C/C++中的指针,但要注意引用和指针并不是同一个概念。指针是一个存放地址的变量,他使C/C++程序员能够灵活地访问内存,但这也给程序的安全性带来了很大的隐患,由于程序员可以对指针随意的运算操作,所以一不留神就会破坏其他的存储单位,导致程序中出现意想不到的结果。引用继承了指针节省内存的优点,又限制了对地址的操作,所以他是安全的。引用类型包括所有类生成的实例和数组(不管是对象数组还是基本类型数组都实现Cloneable接口,所以他也是一个对象实例),所有引用类型都继承自Object这个类。要说明一点的是java中的所有变量都是一个引用,不管是引用类型还是基本类型。现在要正式讨论类型的转换了。用过C/C++的人对基本类型的转换都会很清楚,基本类型转换分为类型提升和强制转换。
例如:
int a=100;
long
b=a+100; //这个地方就用到了类型提升,a+100从int提升到了long
a=(int)b;//这个地方用到了强制转换
强制类型转换在某种情况下会丢失精度,如:
byte b;
int a=200;
b=(byte)a;//虽然这里用到了强制转换,但因为byte的范围是-127到127
//所以强制转换后宽度会被截短
在java中除了这些转换之外基本数据类型还可以被隐式的转换成String,例如:
System.out.print("转换"+100);//如果在数据前面有字符串用+连接
//就会隐式的转换成String
引用类型的转换实现起来要比C++简单的多,如果一个对象与另一个对象没有任何的继承关系,那么他们就不能进行类型转换。如果要把一个派生类对象赋值给基类对象这个称为上溯造型。如果要把基类对象赋值给派生类对象就需要强制类型转换,这称为下溯造型,下溯造型有一些危险,要安全的进行下溯造型有一个前题,基类对象必须是从派生类对象中上溯过来的。
例如:
class Base{}
class Child extends Base{
public static void main(String[] args){
Base base=new Child();//上溯造型
Child child=(Child)base;//下溯造型
Child child1=(Child)new
Base();//抛出ClassCastException异常
}
}
最后,谈一谈String与引用类型的转换。前面已经说过,所有的对象都是从Object继承过来的,Object中有一个toString方法。这个方法是所有的对象都可以转换成String,如果想把自定义的类转换成String,最安全的做法是重写toString方法。和基本类型一样如果对象前有String对象用+连接,对象就会隐式转换成String,这种情况实际上是隐式调用了toString方法。
㈡ java运行原理
一个类的加载运行举个例子:1.User u = new User();(存放在内存的堆区)
创建了一个User类实例,也就是说在声明该类的时候才会去加载这个类,实际上是通过这个类的CLASS实例实例化的。方法如下:
User u=(User)Class.forName("User").newInstance();
2.u.setName("admin"); u.setPwd("159");(存放在内存的栈区)
调用该类的方法,为该类的变量赋值,Java虚拟机内部调用是这样的,通过方法区找到该方法,所以那些类型、方法、变量、常量什么的都放在这个方法区中
3.String name = u.getName(); String pwd = u.getPwd();
与第二步类似,不同的是将取得的值分别赋给了变量name和pwd。关键是这个值保存在哪里?和实例对象一样,存放在堆区。这个时候应该可以看出CLASS实例的作用了,它就是起个中间作用,将程序中的调用反应到堆区上数据的变化。
我也有点模糊 个人观点不喜勿喷 有错请指出
至于相关电子书这个我觉得可以去看看官方的文档比较好 在加上自己的理解、操作
㈢ java中read()方法的原理是什么
read方法是读取字节流。
可以通过BufferedReader 流的形式进行流缓存,之后通过read方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.read())!= -1) // 判断是否为最后一个字节,是的话结束循环
{
System.out.println(str);//输出读到的内容
};
流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
备注:字节流读取过程中很容易出现乱码,建议可以用readLine方式进行每行的读取。
㈣ 你知道java的运行原理是什么吗
Java这一语言的执行过程也遵循这样的过程:源代码--->机器码。 但是,从源代码到机器码之间,究竟经过什么样的过程,则是Java独一无二的了。宽泛地讲,Java源代码(.java)经过java编译器(javac.exe)编译之后,并没有直接转化为机器码,而是转化成一种中间格式,成为字节码(.class),字节码再经过java虚拟机转化成特定CPU架构的机器码。也正是因为这一中间物,java才有所谓的跨平台。在windows平台上编译好的字节码,到linux平台后,经过为linux而设计的Java虚拟机解释后即可执行。跨平台这一特征,是通过字节码和JVM来实现的。
因此,想搞清楚java程序到底是如何运行的,重点在于弄明白字节码是如何被转化成跟CPU架构相关的机器码然后被执行的。也就是要理解JVM到底是如何工作的。在了解JVM之前,我们再跳出来一下,先看看什么是虚拟机。所谓虚拟机,我是这么理解的:用软件的方式模拟出跟硬件类似的环境,比如说寄存器、存储器等等。当然,所有最终的工作还是由原来的CPU来完成。比如说VirtualBox这个虚拟机产品,它其实就是一个应用程序,用某种编程语言编写的应用程序。当运行这个应用程序时,它会要求操作系统给它独立施展手脚的空间:给我一些内存,给我一定的CPU时间片,然后不用管我了。你可能会问,寄存器是硬件啊,它怎么能划分啊,难道是时间划分?不是的,像内存这样的硬件,可以给虚拟机一块独立的内存块,但是寄存器之后的,则需要用“模拟仿真”的方式来模拟。OK,回到Java虚拟机。到底什么是Java虚拟机,很难有一个十分明确的定义,狭窄一点说,它就是一个应用程序,大部分用C++编写的。宽泛地说,它就是执行字节码的一整个环境。
㈤ java线程原理
首先你这两个线程都是永不停止的
在电脑操作系统内部,有个东西叫readyList。当t2.start(); t3.start(); 执行后,这两个线程以及main线程(3个线程)都被放入了readyList。
之后你可以这么理解,假设这三个线程的priority(优先级别)是一样的,每个线程只准执行万分之一秒,然后readyList的scheler就来管了:线程1,你的时间到了,给我滚回readyList里去。下个线程准备
有关java更多线程,可以在oracle网站上找哦,我在这里学到了很多东西。
参考资料:http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html
㈥ Java语言中,数组的实现原理是什么
java不支持指针,也不支持在类外定义函数,所以如果你在java里这么做是没有意义的,这不符合java的思想。如果你非要把重点放在函数上,你可以在类里定义函数,然后从类间接调用函数。
㈦ java 运行原理是什么
java有一个垃圾回收机制,总是在内存剩余大概5%才启动,因为它中断权限最高,它运行,其他全部停止,因此,我们不希望垃圾回收机制频繁启动,那么就要控制内存不要触碰剩余5%底线。
而在普通JavaBeans系统中,每一次客户端请求访问时,系统总是new一个javabeans或Java Class,如果并发访问量很大,比如并发10人或100人,再加上你的系统复杂,有很多JavaBeans,假设有30个,那么这下子100个并发请求来,就有3000个Java对象创建,然后下一批有来一次100个请求,这象潮水一样。
每次请求产生的3000个对象会继续占用内存,不会被垃圾回收机制回收,因为垃圾回收机制只有等到内存剩余5%才启动,这样,你的内存无论多大,取决于访问量,总会被耗光,最后垃圾回收出来收拾残局,你的业务系统被暂停甚至缓慢。
所以,这里需要有资源控制,将内存能够控制住,不要被无限消耗,最后导致垃圾回收启动,造成系统好像死机。
控制资源就是使用Pool或Cache来控制,Spring/JdonFramework下可自行加入; EJB已经默认加入了。
这也是我一直反对使用Jsp+JavaBeans来写复杂或大访问量的系统,至于如何控制服务器资源,只有数据库连接池是不够的,因为Bean才是真正的资源消耗重点。
如果你理论上属于无知,又狂热追求Spring这些新玩艺(当初),那么,即使你使用Spring,性能还是和Jsp+JavaBeans一样,在大访问量情况下经常死机,因为Spring里面需要手工配置Pool或Cache这些资源控制机制。
如果说Java比C方便,因为对象使用之后不需要清理,那么有了Ioc/DI依赖注射以后,Java中对象使用之前也不需要创建了。
spring 的好处,不用创建javabean对象了。
㈧ java编程原理(简单的说一下)
java语言编写的源程序在计算机上需要经过编译和解释执行两个严格区分的阶段。java的编译源程序先将java源程序翻译成与机器无关的节码(bytecode),不是通常的编译程序将源程序翻译成特定计算机的机器代码。运行时系统装载和链接需要执行的类,并做必须的优化后,解释执行字节码程序。
㈨ JAVA接口的原理
接口的实现原理 应该说接口实现是没有什么原理的
你定义了一个接口 不去用他也是可以的 没有问题的
接口可以说是一个工具 或者说是一个规范
在写作文的时候 老师规定要列提纲 但是实际上作文是可以脱离
提纲而独立存在 但是有了提纲我们就能很快了解到作为的内容
接口一样的 一开始我们编程 可能都用不到接口 所以一直在迷惑
这接口到底有什么作用。
接口当然很有用
等到你做一个大的项目的时候 你就会发现 有一些实体 服务 他们都是差不多的
那就有必要事先把这些服务抽象出接口来
然后我们的编码就按照接口的规范来实现具体的功能。
以后要是数据库表结构发生了大变化 重构代码难度很大 需要这部分功能重新开放 那么这个接口 就可以复用 对这个接口 进行实现就可以了。
总结出来:接口是服务于我们的代码 让我们的代码更好理解 更有层次感
具体的系统功能 还是在我们的实现类底下的 service最终还是调用我们实现类的
以上原创 手打 没有用标点的习惯
㈩ java中反射原理,和应用
此问题就是给你写一篇10000字的作文都不一定能将的清楚,我大致上说一下,反射的原理:一类事物在一起统称一个类class,所有的class在一起统称类Class,注意大小写;用类CLass去调用我们的一个类class用的就是反射,在SSH里面经常有配置文件里面需要写一个类的全名,然后框架就会去调用这个类,你想过为什么吗?他系统有不可能直接NEW一个你这个类的对象,他是如何调用类里面的方法?这个就是反射的强大之处了,不用new的,只要一个类的全名就能执行里面的方法