admin 管理员组文章数量: 1086019
2024年4月17日发(作者:iptables用法)
Thinking in Java
Although it is based on C++, Java is more of a “pure” object-oriented C++
and Java are hybrid languages, but in Java the designers felt that the hybridization was not as
important as it was in C++. A hybrid language allows multiple programming styles; the reason
C++ is hybrid is to support backward compatibility with the C language. Because C++ is a
superset of the C language, it includes many of that language’s undesirable features, which can
make some aspects of C++ overly complicated. The Java language assumes that you want to do
only object-oriented programming. This means that before you can begin you must shift your
mindset into an object-oriented world (unless it’s already there). The benefit of this initial effort
is the ability to program in a language that is simpler to learn and to use than many other OOP
languages. In this chapter we’ll see the basic components of a Java program and we’ll learn
that everything in Java is an object, even a Java program.
Each programming language has its own means of manipulating data. Sometimes the
programmer must be constantly aware of what type of manipulation is going on. Are you
manipulating the object directly, or are you dealing with some kind of indirect representation (a
pointer in C or C++) that must be treated with a special syntax?
All this is simplified in Java. You treat everything as an object, using a single consistent
syntax. Although you treat everything as an object, the identifier you manipulate is actually a
“reference” to an object. You might imagine this scene as a television (the object) with your
remote control (the reference). As long as you’re holding this reference, you have a connection
to the television, but when someone says “change the channel” or “lower the volume,” what
you’re manipulating is the reference, which in turn modifies the object. If you want to move
around the room and still control the television, you take the remote/reference with you, not the
television.
Also, the remote control can stand on its own, with no television. That is, just because you
have a reference doesn’t mean there’s necessarily an object connected to it. So if you want to
hold a word or sentence, you create a String reference:
But here you’ve created only the reference, not an object. If you decided to send a
message to s at this point, you’ll get an error (at run time) because s isn’t actually attached to
anything (there’s no television). A safer practice, then, is always to initialize a reference when
you create it.
However, this uses a special Java feature: strings can be initialized with quoted text.
Normally, you must use a more general type of initialization for objects
When you create a reference, you want to connect it with a new object. You do so, in general,
with the new keyword. The keyword new says, “Make me a new one of these objects.” So in
the preceding example, you can say:
Not only does this mean “Make me a new String,” but it also gives information about how
to make the String by supplying an initial character string.
Of course, String is not the only type that exists. Java comes with a plethora of ready-made
types. What’s more important is that you can create your own types. In fact, that’s the
fundamental activity in Java programming, and it’s what you’ll be learning about in the rest of
this book
It’s useful to visualize some aspects of how things are laid out while the program is
running—in particular how memory is arranged. There are six different places to store data:
Registers. This is the fastest storage because it exists in a place different from that of other
storage: inside the processor. However, the number of registers is severely limited, so registers
are allocated by the compiler according to its needs. You don’t have direct control, nor do you
see any evidence in your programs that registers even exist.
The stack. This lives in the general random-access memory (RAM) area, but has direct support
from the processor via its stack pointer. The stack pointer is moved down to create new
memory and moved up to release that memory. This is an extremely fast and efficient way to
allocate storage, second only to registers. The Java compiler must know, while it is creating the
program, the exact size and lifetime of all the data that is stored on the stack, because it must
generate the code to move the stack pointer up and down. This constraint places limits on the
flexibility of your programs, so while some Java storage exists on the stack—in particular,
object references—Java objects themselves are not placed on the stack.
The heap. This is a general-purpose pool of memory (also in the RAM area) where all Java
objects live. The nice thing about the heap is that, unlike the stack, the compiler doesn’t need to
know how much storage it needs to allocate from the heap or how long that storage must stay
on the heap. Thus, there’s a great deal of flexibility in using storage on the heap. Whenever you
need to create an object, you simply write the code to create it by using new, and the storage is
allocated on the heap when that code is executed. Of course there’s a price you pay for this
flexibility. It takes more time to allocate heap storage than it does to allocate stack storage (if
you even could create objects on the stack in Java, as you can in C++).
Static storage. “Static” is used here in the sense of “in a fixed location” (although it’s also in
RAM). Static storage contains data that is available for the entire time a program is running.
You can use the static keyword to specify that a particular element of an object is static, but
版权声明:本文标题:Java编程思想-毕业论文外文文献翻译 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713291791a627906.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论