Ⅰ java 代码报错
要学会看报的错误才行,IllegalArgumentException 这个异常是非法数据异常, 后面说 增加的容器的父容器是它本身,然后再看下面最后两行说你的JTextFieldTest.java 这个类的36 和 50 行有错误 ,50 行应该是Main方法吧,那先是错误向上抛到了Main方法还是没处理就报错了,所以真正的错误就是在36行,你自己看一下行数改一下,不过应该是 pField.add(pField);这句代码的错吧!
Ⅱ Java内存划分到底是4个部分还是5个部分
Java把内存划分成两种:一种是栈内存,一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。具体的说:栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int,short,long,byte,float,double,boolean,char)和对象句柄。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义:inta=3;intb=3;编译器先处理inta=3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理intb=3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b,它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。
Ⅲ java代码运行的时候将内存分成哪些区
您好,提问者:
java中在内存中划分:栈内存和堆内存。
1、栈内存:栈中是存放一些定义的变量的引用,比如:int a = 1; a那么就存在栈内存中,java中垃圾回收是JVM帮我们完成的,这里比C大大提高了程序员的繁碎。如果想要控制可以使用System.gc();来通知JVM虚拟机执行,但是什么时候执行还是由JVM虚拟机来完成的。
2、堆内存:堆中是存放一些比如数组,map类型等。
Ⅳ 菜鸟:刚学java,堆区,栈区,静态区,代码区,晕了!!!!!
你问题太多了。简单为你解答一下吧,JAVA语言的内存管理分为栈内存,堆内存和方法区,栈内存用来存储基本数据类型和对象的引用(对象的实体和引用这两个概念你要搞明白),堆内存用来存储对象的实体。。你记住,JAVA是一门面向对象的语言,在JAVA理万事万物都是对象,除了两个东西:1,8个基本数据类型(对应的,还有8个相关的包装类,但是为了JAVA运行速度的考虑,SUN公司保留了这8个基本数据类型);2,就是你所谓的入口方法,即main方法;这两点是JAVA不是纯粹的面向对象语言的表现,也就是他比较特殊的地方,你记住就行了;接下来,我们来看栈内存和堆内存,JAVA里面所有东西都是对象,那么对象保存在哪呢?其实,对象里的所有东西保存在堆内存里,里面包括了这个对象的成员变量和方法等东西,而栈内存里,保存的是这个对象所属的这块堆内存的首地址?也就是一个16进制的数字,明白了?因为你要告诉JAVA虚拟机从哪里去开始读取这块堆内存啊。所以,你明白栈内存用来存储基本数据类型和对象的引用,堆内存用来存储对象的实体了。。而内存管理里面还有一块叫方法区,这是JAVA虚拟机用来在执行一个JAVA程序之前保存这个程序的结构等级的地方,虚拟机按照这个结构等级来调用程序里德对象方法等,而静态变量和静态方法正是保存在方法区里,所以静态方法可以在不创建对象的时候就调用,因为创建对象就是为对象分配堆内存,只有创建了对象之后才能调用对象的非静态方法和非静态变量。。你的第一个问题就能解答了,这个情况就是zhangsan的堆内存里保存的car对象的引用,而这个引用又指向car对象的堆内存;对象的成员变量是保存在自己的堆内存里的;而入口类是一个特殊的东西,你特殊对待就行了。
Ⅳ java代码右下角加锁能运行吗为什么
能。java代码右下角加锁能运行,是因为多线程共享的代码区域需要上锁,防止多线程同时访问代码块,造成线程安全问题。
Ⅵ java jsp <%! %>什么意思啊
<% %>这个是java代码区!可以写java的代码:如request等!
<%! %>可以写java的方法和全局变量,
<%= %>这个是输出
三者都是实现jsp script,可也是说是将java代码写到jsp页面中,
不过主要用于servlet的应用吧!但建议不要再jsp页面中使用java代码!!
呵呵!
Ⅶ JAVA构造代码块所在区域
一.简介
首先说一下,Java中有哪些代码块.
普通代码块
就是在方法后面使用"{}"括起来的代码片段,不能单独执行,必须调下其方法名才可以执行.12
静态代码块
在类中使用static修饰,并使用"{}"括起来的代码片段,用于静态变量的初始化或对象创建前的环境初始化.12
同步代码块
使用synchronize关键字修饰,并使用"{}"括起来的代码片段.它表示在同一时间只能有一个线程进入到该方法快中,是一种多线程保护机制.12
构造代码块
在类中没与任何的前缀或后缀,并使用"{}"括起来的代码片段.12
简单的例子:
public class Client {
{//构造代码块
System.out.println("执行构造代码块");
} public Client() {
System.out.println("执行无参构造函数");
} public Client(String string) {
System.out.println("执行有参构造函数");
}
}12345678910111213
这是一丢按非常简单的代码,它包含了构造代码块,无参构造,有参构造.我先看一个问题,我们知道代码块不具有独立执行的能力,那么编译器是如何处理构造代码块的呢?很简单,编译器会把构造代码块插入到每个构造函数的最前端.这样 上面的代码就等同于:
public class Client { public Client() {
System.out.println("执行构造代码块");
System.out.println("执行无参构造函数");
} public Client(String string) {
System.out.println("执行构造代码块");
System.out.println("执行有参构造函数");
}
}12345678910111213
二.特性与应用
基本的理解后,我们再来看下其和构造函数的执行顺序.由于是插入到构造函数的的前面,自然在通过new关键字生成一个实例的时候会先执行构造代码块,然后在执行其他代码(注意:构造代码块不是在构造函数之前运行,而是依托于构造函数).接着我们来看一下两个主要的应用场景:
1.初始化实例变量
如果每个构造函数都需要初始化变量,即可通过构造代码块来实现.从而取代在每个构造函数调用初始化实例变量的方法.12
2.初始化实例环境
一个对象必须在适当的场景下才能存在,如果没有适当的场景,则就需要在创建对象的时候创建此场景.12
以上两个场景都是利用了构造代码块的两个特性:
1.在每个构造函数中都运行
2.在构造函数中它会首先运行123
三.构造代码块足够聪明
首先看一段代码,使用构造代码块做对象计数器.
public class Client { public static int count = 0;
{
count++;
} public Client() {
} public Client(int i) { this();
} public Client(String string) {
} public static void main(String[] args) { new Client(); new Client(1); new Client("1");
System.out.println(Client.count);
}
}
这个代码真的达到我们预期的效果吗?你可能会对this()产生了质疑.
答案是:3.
显然Java编译器是足够聪明的.这是因为,在插入到每个构造函数中的时候,有个例外,就是如果遇到this关键字(也就是构造函数调用自身其他的构造函数时)不插入构造代码块.
那为什么编译器这么聪明呢?这是因为构造代码块的出现就是为了提取构造函数的共同量,减少各个构造函数的代码而产生的.
四.总结
灵活适当的使用构造代码块会让你的代码更加的简约和清晰.代码的质量自然很高很多,逼格也高了许多,有没有.
最后还有一点需要注意的,千万不要认为this是特殊情况,那super也会类似处理.其实不会,在构造代码块的处理上,super方法没有任何特殊的地方.编译器只是把构造代码块插入到super方法之后执行而已.
Ⅷ 在java里面代码区 是 数据区么
您好,java源代码内部是没有代码区与数据区一说的(至少官方文档没有见到过),我想您所谓的数据区应该是一组需要处理的数据吧,但这并不是JDK的标准或规范。
Ⅸ Java把内存划分为4个部分 1. 代码区 1、栈区 3、堆区 4、静态区%
Java把内存划分为以下4个部分:
1、栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源。
2、堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收。
3、静态区(datasegment)—存放全局变量,静态变量和字符串常量,不释放。
4、代码区(codesegment)—存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域。
Ⅹ java和c语言的区别
C语言是经典的面向过程的编程语言,编程入门一般都学C语言以了解编程以及锻炼逻辑思维能力,在一些跟硬件比较紧密的编程中也经常用到。\x0d\x0a\x0d\x0aC++是在C语言的基础上加入了面向对象的概念,成为混合型面向对象语言,功能强大,但难度也大。\x0d\x0a\x0d\x0aJava是在C++的基础上进行改进的,摒弃了一些C++的不足之处,语法跟C++很像,它是运行在Java虚拟机上,所以可以跨平台,一处编译,到处执行。\x0d\x0a\x0d\x0a编程都是易学难精,哪个都好学,哪个又都不好学。都有很好的发展前景,就看是什么方向了。底层的C、桌面应用程序、游戏等等C++、嵌入式,网页,Java。