Question? Leave a message!

OOPs through JAVA Lecture Notes

Lecture Notes OOPs through JAVA and oops through java important questions | pdf free download
ShawnPacinocal Profile Pic
ShawnPacinocal,United States,Researcher
Published Date:09-07-2017
Website URL
SHRI VISHNU ENGINEERING COLLEGE FOR WOMEN::BHIMAVARAM DEPARTMENT OF INFORMATION TECHNOLOGY OOPs through JAVA Lecture Notes SVECW IT DEPT Page 1 1-UNIT Need for oop paradigm • The object oriented paradigm is a methodology for producing reusable software components • The object-oriented paradigm is a programming methodology that promotes the efficient design and development of software systems using reusable components that can be quickly and safely assembled into larger systems. • Object oriented programming has taken a completely different direction and will place an emphasis on object s and information. With object oriented programming, a problem will be broken down into a number of units .these are called objects .The foundation of oop is the fact that it will place an emphasis on objects and classes. There are number of advantages to be found with using the oop paradigm, and some of these are oop paradigm • Object oriented programming is a concept that was created because of the need to overcome the problems that were found with using structured programming techniques. While structured programming uses an approach which is top down, oop uses an approach which is bottom up. • A paradigm is a way in which a computer language looks at the problem to be solved. We divide computer languages into four paradigms: procedural, object-oriented, functional and declarative • A paradigm shift from a function-centric approach to an object-centric approach to software development • A program in a procedural paradigm is an active agent that uses passive objects that we refer to as data or data items. • The basic unit of code is the class which is a template for creating run-time objects. • Classes can be composed from other classes. For example, Clocks can be constructed as an aggregate of Counters. • The object-oriented paradigm deals with active objects instead of passive objects. We encounter many active objects in our daily life: a vehicle, an automatic door, a dishwasher and so on. The actions to be performed on these objects are included in the object: the objects need only to receive the appropriate stimulus from outside to perform one of the actions. • A file in an object-oriented paradigm can be packed with all the procedures—called methods in the object-oriented paradigm—to be performed by the file: printing, copying, SVECW IT DEPT Page 2 deleting and so on. The program in this paradigm just sends the corresponding request to the object • Java provides automatic garbage collection, relieving the programmer of the need to ensure that unreferenced memory is regularly deallocated.need Object Oriented Paradigm – Key Features • Encapsulation • Abstraction • Inheritance • Polymorphis A Way of viewing World- Agents • The word agent has found its way into a number of technologies. It has been applied to aspects of artificial intelligence research and to constructs developed for improving the experience provided by collaborative online social environments (MUDS, MOOs, and the like). It is a branch on the tree of distributed computing. There are agent development toolkits and agent programming languages. • The Agent Identity class defines agent identity. An instance of this class uniquely identifies an agent. Agents use this information to identify the agents with whom they are interested in collaborating. • The Agent Host class defines the agent host. An instance of this class keeps track of every agent executing in the system. It works with other hosts in order to transfer agents. • The Agent class defines the agent. An instance of this class exists for each agent executing on a given agent host. • OOP uses an approach of treating a real world agent as an object. • Object-oriented programming organizes a program around its data (that is, objects) and a set of well-defined interfaces to that data. • An object-oriented program can be characterized as data controlling access to code by switching the controlling entity to data. Responsibility • In object-oriented design, the chain-of-responsibility pattern is a design pattern consisting of a source of command objects and a series of processing objects.. • Each processing object contains logic that defines the types of command objects that it can handle; the rest are passed to the next processing object in the chain. A mechanism also exists for adding new processing objects to the end of this chain. SVECW IT DEPT Page 3 • Primary motivation is the need for a platform-independent (that is, architecture- neutral) language that could be used to create software to be embedded in various consumer electronic devices, such as microwave ovens and remote controls. • Objects with clear responsibilities • Each class should have a clear responsibility. • If you can't state the purpose of a class in a single, clear sentence, then perhaps your class structure needs some thought. • In object-oriented programming, the single responsibility principle states that every class should have a single responsibility, and that responsibility should be entirely encapsulated by the class. All its services should be narrowly aligned with that responsibility. Messages • Message implements the Part interface. Message contains a set of attributes and a "content". • Message objects are obtained either from a Folder or by constructing a new Message object of the appropriate subclass. Messages that have been received are normally retrieved from a folder named "INBOX". • A Message object obtained from a folder is just a lightweight reference to the actual message. The Message is 'lazily' filled up (on demand) when each item is requested from the message. • Note that certain folder implementations may return Message objects that are pre-filled with certain user-specified items. To send a message, an appropriate subclass of Message (e.g., Mime Message) is instantiated, the attributes and content are filled in, and the message is sent using the Transport. Send method. • We all like to use programs that let us know what's going on. Programs that keep us informed often do so by displaying status and error messages. • These messages need to be translated so they can be understood by end users around the world. • The Section discusses translatable text messages. Usually, you're done after you move a message String into a Resource Bundle. • If you've embedded variable data in a message, you'll have to take some extra steps to prepare it for translation. Methods • The only required elements of a method declaration are the method's return type, name, a pair of parentheses, (), and a body between braces, . • Two of the components of a method declaration comprise the method signature—the method's name and the parameter types. • More generally, method declarations have six components, in order: • Modifiers—such as public, private, and others you will learn about later. SVECW IT DEPT Page 4 • The return type—the data type of the value returned by the method, or void if the method does not return a value. • The method name—the rules for field names apply to method names as well, but the convention is a little different. • The parameter list in parenthesis—a comma-delimited list of input parameters, preceded by their data types, enclosed by parentheses, (). If there are no parameters, you must use empty parentheses. • The method body, enclosed between braces—the method's code, including the declaration of local variables, goes here. Naming a Method Although a method name can be any legal identifier, code conventions restrict method names. By convention, method names should be a verb in lowercase or a multi-word name that begins with a verb in lowercase, followed by adjectives, nouns, etc. In multi- word names, the first letter of each of the second and following words should be capitalized. Here are some examples: run run Fast getBackground getFinalData compareTo setX isEmpty Typically, a method has a unique name within its class. However, a method might have the same name as other methods due to method overloading. Overloading Methods • The Java programming language supports overloading methods, and Java can distinguish between methods with different method signatures. This means that methods within a class can have the same name if they have different parameter lists (there are some qualifications to this that will be discussed in the lesson titled "Interfaces and Inheritance"). SVECW IT DEPT Page 5 • In the Java programming language, you can use the same name for all the drawing methods but pass a different argument list to each method. Thus, the data drawing class might declare four methods named draw, each of which has a different parameter list. • Overloaded methods are differentiated by the number and the type of the arguments passed into the method. • You cannot declare more than one method with the same name and the same number and type of arguments, because the compiler cannot tell them apart. • The compiler does not consider return type when differentiating methods, so you cannot declare two methods with the same signature even if they have a different return type. • Overloaded methods should be used sparingly, as they can make code much less readable. Classes • In object-oriented terms, we say that your bicycle is an instance of the class of objects known as bicycles. A class is the blueprint from which individual objects are created. • Java classes contain fields and methods. A field is like a C++ data member, and a method is like a C++ member function. In Java, each class will be in its own .java file. Each field and method has an access level: • private: accessible only in this class • (package): accessible only in this package • protected: accessible only in this package and in all subclasses of this class • public: accessible everywhere this class is available • Each class has one of two possible access levels: • (package): class objects can only be declared and manipulated by code in this package • Public: class objects can be declared and manipulated by code in any package. • Object: Object-oriented programming involves inheritance. In Java, all classes (built-in or user-defined) are (implicitly) subclasses of Object. Using an array of Object in the List class allows any kind of Object (an instance of any class) to be stored in the list. However, primitive types (int, char, etc) cannot be stored in the list. • A method should be made static when it does not access any of the non-static fields of the class, and does not call any non-static methods. • Java class objects exhibit the properties and behaviors defined by its class. A class can contain fields and methods to describe the behavior of an object. Current states of a class‘s corresponding object are stored in the object‘s instance variables. • Creating a class: SVECW IT DEPT Page 6 A class is created in the following way Class class name Member variables; Methods; • An object is a software bundle of related state and behavior. Software objects are often used to model the real-world objects that you find in everyday life. This lesson explains how state and behavior are represented within an object, introduces the concept of data encapsulation, and explains the benefits of designing your software in this manner. Class Variables – Static Fields • We use class variables also know as Static fields when we want to share characteristics across all objectswithin a class. When you declare a field to be static, only a single instance of the associated variable is created common to all the objects of that class. Hence when one object changes the value of a class variable, it affects all objects of the class. We can access a class variable by using the name of the class, and not necessarily using a reference to an individual object within the class. Static variables can be accessed even though no objects of that class exist. It is declared using static keyword. Class Methods – Static Methods Class methods, similar to Class variables can be invoked without having an instance of the class. Class methods are often used to provide global functions for Java programs. For example, methods in the java.lang.Math package are class methods. You cannot call non- static methods from inside a static method. Bundling code into individual software objects provides a number of benefits, including: • Modularity: The source code for an object can be written and maintained independently of the source code for other objects. Once created, an object can be easily passed around inside the system. • Information-hiding: By interacting only with an object's methods, the details of its internal implementation remain hidden from the outside world. • Code re-use: If an object already exists (perhaps written by another software developer), you can use that object in your program. This allows specialists to implement/test/debug complex, task-specific objects, which you can then trust to run in your own code. • Pluggability and debugging ease: If a particular object turns out to be problematic, you can simply remove it from your application and plug in a different object as its replacement. This is analogous to fixing mechanical problems in the real world. If a bolt breaks, you replace it, not the entire machine. An instance or an object for a class is created in the following way class name object name=new constructor(); Encapsulation: • Encapsulation is the mechanism that binds together code and the data it manipulates, and keeps both safe from outside interference and misuse. SVECW IT DEPT Page 7 • One way to think about encapsulation is as a protective wrapper that prevents the code and data from being arbitrarily accessed by other code defined outside the wrapper. • Access to the code and data inside the wrapper is tightly controlled through a well- defined interface. • To relate this to the real world, consider the automatic transmission on an automobile. • It encapsulates hundreds of bits of information about your engine, such as how much we are accelerating, the pitch of the surface we are on, and the position of the shift. • The power of encapsulated code is that everyone knows how to access it and thus can use it regardless of the implementation details—and without fear of unexpected side effects. Polymorphism: Polymorphism (from the Greek, meaning ―many forms‖) is a feature that allows one interface to be used for a general class of actions. • The specific action is determined by the exact nature of the situation. Consider a stack (which is a last-in, first-out list). We might have a program that requires three types of stacks. One stack is used for integer values, one for floating-point values, and one for characters. The algorithm that implements each stack is the same, even though the data being stored differs. • In Java we can specify a general set of stack routines that all share the same names. More generally, the concept of polymorphism is often expressed by the phrase ―one interface, multiple methods.‖This means that it is possible to design a generic interface to a group of related activities. • This helps reduce complexity by allowing the same interface to be used to specify a general class of action. • Polymorphism allows us to create clean, sensible, readable, and resilient code. class Hierarchies (Inheritance): • Object-oriented programming allows classes to inherit commonly used state and behavior from other classes. Different kinds of objects often have a certain amount in common with each other. • In the Java programming language, each class is allowed to have one direct superclass, and each superclass has the potential for an unlimited number of subclasses: • Mountain bikes, road bikes, and tandem bikes, for example, all share the characteristics of bicycles (current speed, current pedal cadence, current gear). Yet each also defines additional features that make them different: tandem bicycles have two seats and two sets of handlebars; road bikes have drop handlebars; some mountain bikes have an additional chain ring, giving them a lower gear ratio. In this example, Bicycle now becomes the super class of Mountain Bike, Road Bike, and Tandem Bike. • The syntax for creating a subclass is simple. At the beginning of your class declaration, use the extends keyword, followed by the name of the class to inherit from: SVECW IT DEPT Page 8 class sub class extends super class // new fields and methods defining a sub class would go here The different types of inheritance are 1. Single level Inheritance. 2. Multilevel Inheritance. 3. Hierarchical inheritance. 4. Multiple inheritance. 5. Hybrid inheritance. Multiple,hybrid inheritance is not used in the way as other inheritances but it needs a special concept called interfaces. Method Binding: • Binding denotes association of a name with a class. • Static binding is a binding in which the class association is made during compile time. This is also called as early binding. • Dynamic binding is a binding in which the class association is not made until the object is created at execution time. It is also called as late binding. Abstraction: Abstraction in Java or Object oriented programming is a way to segregate implementation from interface and one of the five fundamentals along with Encapsulation, Inheritance, Polymorphism, Class and Object. • An essential component of object oriented programming is Abstraction • Humans manage complexity through abstraction. • For example people do not think a car as a set of tens and thousands of individual parts. They think of it as a well defined object with its own unique behavior. • This abstraction allows people to use a car ignoring all details of how the engine, transmission and braking systems work. • In computer programs the data from a traditional process oriented program can be transformed by abstraction into its component objects. • A sequence of process steps can become a collection of messages between these objects.Thus each object describes its own behavior. Overriding: • In a class hierarchy when a sub class has the same name and type signature as a method in the super class, then the method in the subclass is said to override the method in the super class. • When an overridden method is called from within a sub class, it will always refer to the version of that method defined by the sub class. • The version of the method defined by the super class will be hidden. SVECW IT DEPT Page 9 Exceptions: • An exception is an abnormal condition that arises in a code sequence at run time. • In other words an exception is a run time error. • A java exception is an object that describes an exceptional condition that has occurred in a piece of code. • When an exceptional condition arises, an object representing that exception is created and thrown in the method that caused the error. • Now the exception is caught and processed. Summary of oops concepts • Object-oriented programming (OOP) is a programming paradigm that represents concepts as "objects" that have data fields (attributes that describe the object) and associated procedures known as methods. Objects, which are usually instances of classes, are used to interact with one another to design applications and computer programs. • Object-oriented programming is an approach to designing modular, reusable software systems. • The goals of object-oriented programming are: • Increased understanding. • Ease of maintenance • Ease of evolution. • Object orientation eases maintenance by the use of encapsulation and information hiding. • Object-Oriented Programming – Summary of Key Terms Definitions of some of the key concepts in Object Oriented Programming(OOP). Term Definition Abstract A user-defined data type, including both attributes (its state) Data Type and methods (its behaviour). An object oriented language will include means to define new types (see class) and create instances of those classes (see object). It will also provide a number of primitive types. Aggregation Objects that are made up of other objects are known as aggregations. The relationship is generally of one of two types: • Composition – the object is composed of other objects. This form of aggregation is a form of code reuse. E.g. A Car is composed of Wheels, a Chassis and an Engine • Collection – the object contains other objects. E.g. a List contains several Items; A Set several Members. SVECW IT DEPT Page 10 A characteristic of an object. Collectively the attributes of an Attribute object describe its state. E.g. a Car may have attributes of Speed, Direction, Registration Number and Driver. Class The definition of objects of the same abstract data type. In Java class is the keyword used to define new types. The identification at run time of which version of a method is Dynamic (Late) being called (see polymorphism). When the class of an object Binding cannot be identified at compile time, it is impossible to use static binding to identify the correct object method, so dynamic binding must be used. The combining together of attributes (data) and methods Encapsulation (behaviour/processes) into a single abstract data type with a public interface and a private implementation. This allows the implementation to be altered without affecting the interface. Inheritance The derivation of one class from another so that the attributes and methods of one class are part of the definition of another class. The first class is often referred to the base or parent class. The child is often referred to as a derived or sub-class. Derived classes are always ‗a kind of‘ their base classes. Derived classes generally add to the attributes and/or behaviour of the base class. Inheritance is one form of object-oriented code reuse. E.g. Both Motorbikes and Cars are kinds of MotorVehicles and therefore share some common attributes and behaviour but may add their own that are unique to that particular type. The behaviour that a class exposes to the outside world; its Interface public face. Also called its ‗contract‘. In Java interface is also a keyword similar to class. However a Java interface contains no implementation: it simply describes the behaviour expected of a particular type of object, it doesn‘t so how that behaviour should be implemented. Member See attribute Variable Method The implementation of some behaviour of an object. Message The invoking of a method of an object. In an object-oriented application objects send each other messages (i.e. execute each others methods) to achieve the desired behaviour. SVECW IT DEPT Page 11 An instance of a class. Objects have state, identity and Object behaviour. Overloading Allowing the same method name to be used for more than one implementation. The different versions of the method vary according to their parameter lists. If this can be determined at compile time then static binding is used, otherwise dynamic binding is used to select the correct method as runtime. Polymorphism Generally, the ability of different classes of object to respond to the same message in different, class-specific ways. Polymorphic methods are used which have one name but different implementations for different classes. E.g. Both the Plane and Car types might be able to respond to a turnLeft message. While the behaviour is the same, the means of achieving it are specific to each type. Primitive The basic types which are provided with a given object- oriented programming language. E.g. int, float, double, char, Type Boolean Static(Early) The identification at compile time of which version of a Binding polymorphic method is being called. In order to do this the compiler must identify the class of an object. UNIT - 2 Java Basics Java was conceived by James gosling, Patrick Naughton, chriswarth, Ed frank and Mike Sheridan at sun Microsystems. The original impetus for java was not internet instead primary motivation was the need for a platform independent (i.e. Architectural neutral) independent language. Java’s Byte code: The key that allows java to solve the both security and portability problems is that the output of a java compiler is not executable code rather it is byte code. Byte code is highly optimized set of instructions designed to be executed by java runtime systems, which is called Java Virtual Machine (JVM). JVM is interpreter for byte code. Translating a java program into byte code helps makes it much easier to run a Program in a wide variety of environments. The reason is straightforward: only the JVM needs to be implemented for each platform. Once the run-time package exists for a given system, any Java program can run on it. SVECW IT DEPT Page 12 The Java Buzzwords: No discussion of the genesis of Java is complete without a look at the Java buzzwords. Although the fundamental forces that necessitated the invention of Java are portability and security, other factors also played an important role in mol ding the final form of the language. The key considerations were summed up by the Java team in the following list of buzzwords: • Simple • Secure • Portable • Object-oriented • Robust • Multithreaded • Architecture-neutral • Interpreted • High performance • Distributed • Dynamic Simple Java was designed to be easy for the professional programmer to learn and use effectively. Assuming that you have some programming experience, you will not find Java hard to master. If you already understand the basic concepts of object-oriented programming, learning Java will be even easier. Best of all, if you are an experienced C++ programmer, moving to Java will require very little effort. Because Java inherits the C/C++ syntax and many of the object-oriented features of C++ Robust The multiplatform environment of the Web places extraordinary demands on a program, because the program must execute reliably in a variety of systems. Thus, the ability to create robust programs were given a high priority in the design of Java. To gain reliability, Java restricts you in a few key areas, to force you to find your mistakes early in program development. At the same time, Java frees you from having to worry about many of the most common causes of programming errors. Because Java is a strictly typed language, it checks your code at compile time. However, it also checks your code at run time. To better understand how Java is robust, consider two of the main reasons for program failure: memory management mistakes and mishandled exceptional conditions (that is, run-time errors). Memory management can be a difficult, tedious task in traditional programming environments. For example, in C/C++, the programmer must manually allocate and free all dynamic memory. This sometimes leads to problems, because programmers will either forget to free memory that has been previously allocated or, worse, try to free some memory that another part of their code is still using. Java virtually eliminates these problems by managing memory allocation and deallocation for you. (In fact, deallocation is completely automatic, SVECW IT DEPT Page 13 because Java provides garbage collection for unused objects.) Exceptional conditions in traditional environments often arise in situations such as division by zero or ―file not found,‖ and they must be managed with clumsy and hard-to-read constructs. Java helps in this area by providing object-oriented exception handling. In a well-written Java program, all run-time errors can—and should—be managed by your program. Multithreaded Java was designed to meet the real-world requirement of creating interactive, networked programs. To accomplish this, Java supports multithreaded programming, which allows you to write programs that do many things simultaneously. Architecture-Neutral A central issue for the Java designers was that of code longevity and portability. One of the main problems facing programmers is that no guarantee exists that if you write a program today, it will run tomorrow—even on the same machine. Operating system upgrades, processor upgrades, and changes in core system resources can all combine to make a program malfunction. The Java designers made several hard decisions in the Java language and the Java Virtual Machine in an attempt to alter this situation. Their goal was ―write once; run anywhere, anytime, forever.‖ To a great extent, this goal was accomplished. Interpreted and High Performance Java enables the creation of cross-platform programs by compiling into an intermediate representation called Java byte code. This code can be interpreted on any system that provides a Java Virtual Machine. Most previous attempts at cross platform solutions have done so at the expense of performance. Java was engineered for interpretation, the Java byte code was carefully designed so that it would be easy to translate directly into native machine code for very high performance by using a just-in-time compiler. Java run-time systems that provide this feature lose none of the benefits of the platform-independent code. ―High-performance cross-platform‖ is no longer an oxymoron. Distributed Java is designed for the distributed environment of the Internet, because it handles TCP/IP protocols. In fact, accessing a resource using a URL is not much different from accessing a file. The original version of Java (Oak) included features for intraaddress- space messaging. This allowed objects on two different computers to execute procedures remotely. Java revived these interfaces in a package called Remote Method Invocation (RMI). This feature brings an unparalleled level of abstraction to client/server programming. Dynamic Java programs carry with them substantial amounts of run-time type information that is used to verify and resolve accesses to objects at run time. This makes it possible to dynamically link code in a safe and expedient manner. This is crucial to the robustness of SVECW IT DEPT Page 14 the applet environment, in which small fragments of byte code may be dynamically updated on a running system. Security Every time that you download a ―normal‖ program, you are risking a viral infection. Even so, most users still worried about the possibility of infecting their systems with a virus. In addition to viruses, another type of malicious program exists that must be guarded against. This type of program can gather private information, such as credit card numbers, bank account balances, and passwords, by searching the contents of your computer‘s local file system. Java answers both of these concerns by providing a ―firewall‖ between a networked application and your computer. When you use a Java- compatible Web browser, you can safely download Java applets without fear of viral infection or malicious intent. Java achieves this protection by confining a Java program to the Java execution environment and not allowing it access to other parts of the computer. Portability Many types of computers and operating systems are in use throughout the world—and many are connected to the Internet. For programs to be dynamically downloaded to all the various types of platforms connected to the Internet, some means of generating portable executable code is needed. As you will soon see, the same mechanism that helps ensure security also helps create portability. Data Types: Java defines eight simple types of data: byte, short, int, long, char, float, double, and Boolean. These can be put in four groups: • Integers this group includes byte, short, int, and long, which are for whole valued signed numbers. • Floating-point numbers this group includes float and double, which represent numbers with fractional precision. • Characters this group includes char, which represents symbols in a character set, like letters and numbers. • Boolean this group includes Boolean, which is a special type for representing true/false values. Integers: The width and ranges of these integer types vary widely, as shown in this table: Name Width Range long 64 –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 int 32 –2,147,483,648 to 2,147,483,647 short 16 –32,768 to 32,767 byte 8 –128 to 127 SVECW IT DEPT Page 15 Floating-point: There are two kinds of floating-point types, float and double, which represent single- and double-precision numbers, respectively. Their width and ranges are shown here: Name Width in Bits Approximate Range double 64 4.9e–324 to 1.8e+308 float 32 1.4e−045 to 3.4e+038 Variables: The variable is the basic unit of storage in a Java program. A variable is defined by the combination of an identifier, a type, and an optional initializer. In addition, all variables have a scope, which defines their visibility, and a lifetime. In Java, all variables must be declared before they can be used. The basic form of a variable declaration is shown here: type identifier = value, identifier = value ...; The type is one of Java‘s atomic types, or the name of a class or interface. The identifier is the name of the variable. You can initialize the variable by specifying an equal sign and a value. To declare more than one variable of the specified type, use a comma- separated list. THE JAVA LANGUAGE Here are several examples of variable declarations of various types. Note that some include an initialization. int a, b, c; // declares three ints, a, b, and c. int d = 3, e, f = 5; // declares three more ints byte z = 22; // initializes z. double pi = 3.14159; // declares an approximation of pi. char x = 'x'; // the variable x has the value 'x'. The Scope and Lifetime of Variables: All of the variables used till now have been declared at the start of the main( ) method. However, Java allows variables to be declared within any block. A block is begun with an opening curly brace and ended by a closing curly brace. A block defines a scope. Thus, each time you start a new block, you are creating Scope determines what objects are visible to other parts of your program. It also determines the lifetime of those objects. Most other computer languages define two general categories of scopes: global and local. The scope defined by a method begins with its opening curly brace. However, if that method has parameters, they too are included within the method‘s scope. variables declared inside a scope are not visible (that is, accessible)to code that is defined outside that scope. Thus, when you declare a variable within a scope, you are localizing that variable and protecting it from unauthorized access and/or modification. Scopes can be nested. For example, each time you create a block of code, you are creating a new, nested scope. When this occurs, the outer scope encloses the inner scope. This means that SVECW IT DEPT Page 16 objects declared in the outer scope will be visible to code within the inner scope. However, the reverse is not true. Objects declared within the inner scope will not be visible outside it. To understand the effect of nested scopes, consider the following program: // demonstrate block scope. class Scope public static void main(String args) int x; // known to all code within main x = 10; if(x == 10) // start new scope int y = 20; // known only to this block // x and y both known here. System.out.println("x and y: " + x + " " + y); x = y 2; // y = 100; // Error y not known here // x is still known here. System.out.println("x is " + x); As the comments indicate, the variable x is declared at the start of main( )‘s scope and is accessible to all subsequent code within main( ). Within the if block, y is declared. Since a block defines a scope, y is only visible to other code within its block. This is why outside of its block, the line y = 100; is commented out. If you remove the leading comment symbol, a compile-time error will occur, because y is not visible outside of its block. Within the if block, x can be used because code within a block (that is, a nested scope) has access to variables declared by an enclosing scope. Here is another important point to remember: variables are created when their scope is entered and destroyed when their scope is left. This means that a variable will not hold its value once it has gone out of scope. Therefore, variables declared within a method will not hold their values between calls to that method. Also, a variable declared within a block will lose its value when the block is left. Thus, the lifetime of a variable is confined to its scope. If a variable declaration includes an initializer, then that variable will be reinitialized each time the block in which it is declared is entered. For example, consider the next program. // Demonstrate lifetime of a variable. class Lifetime public static void main(String args) int x; SVECW IT DEPT Page 17 for(x = 0; x 3; x++) int y = -1; // y is initialized each time block is entered System.out.println("y is: " + y); // this always prints -1 y = 100; System.out.println("y is now: " + y); The output generated by this program is shown here: y is: -1 y is now: 100 y is: -1 y is now: 100 y is: -1 y is now: 100 As you can see, y is always reinitialized to –1 each time the inner for loop is entered. Even though it is subsequently assigned the value 100, this value is lost.One last point: Although blocks can be nested, you cannot declare a variable to have the same name as one in an outer scope. Arrays: An array is a group of similar-typed variables that are referred to by a common name. Arrays of any type can be created and may have one or more dimensions. A specific element in an array is accessed by its index. Arrays offer a convenient means of grouping related information. One-Dimensional Arrays A one-dimensional array is a list of like-typed variables. To create an array, you first must create an array variable of the desired type. The general form of a one dimensional array declaration is type var-name ; Here, type declares the base type of the array. For example, the following declares an array named month with the type ―array of int‖: int month ; Although this declaration establishes the fact that month is an array variable, no array actually exists. In fact, the value of month is set to null, which represents an array with no value. To link month with an actual, physical array of integers, you must allocate one using new and assign it to month. new is a special operator that allocates memory. The general form of new as it applies to one-dimensional arrays appears as follows: SVECW IT DEPT Page 18 array-var = new typesize; Here, type specifies the type of data being allocated, size specifies the number of elements in the array, and array-var is the array variable that is linked to the array. That is, to use new to allocate an array, you must specify the type and number of elements to allocate. The elements in the array allocated by new will automatically be initialized to zero. This example allocates a 12-element array of integers and links them to month month = new int12; After this statement executes, month will refer to an array of 12 integers. Further, all elements in the array will be initialized to zero. Another way to declare an arrayin single step is type arr-name=new typesize; Arrays can be initialized when they are declared. The process is much the same as that used to initialize the simple types. An array initializer is a list of comma-separated expressions surrounded by curly braces. The commas separate the values of the array elements. The array will automatically be created large enough to hold the number of elements you specify in the array initializer. There is no need to use new. For example, to store the number of days in each month, we do as follows // An improved version of the previous program. class AutoArray public static void main(String args) int month = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,30, 31 ; System.out.println("April has " + month3 + " days."); When you run this program, in the output it prints the number of days in April. As mentioned, Java array indexes start with zero, so the number of days in April is month3 or 30. Here is one more example that uses a one-dimensional array. It finds the average of a set of numbers. // Average an array of values. class Average public static void main(String args) double nums = 10.1, 11.2, 12.3, 13.4, 14.5; double result = 0; SVECW IT DEPT Page 19 int i; for(i=0; i5; i++) result = result + numsi; System.out.println("Average is " + result / 5); Output: Average is:12.3 Multidimensional Arrays In Java, multidimensional arrays are actually arrays of arrays. To declare a multidimensional array variable, specify each additional index using another set of square brackets. For example, the following declares a two-dimensional array variable called twoD. int twoD = new int45; This allocates a 4 by 5 array and assigns it to twoD. program : // Demonstrate a two-dimensional array. class TwoDArray public static void main(String args) int twoD= new int45; int i, j, k = 0; for(i=0; i4; i++) for(j=0; j5; j++) twoDij = k; k++; for(i=0; i4; i++) for(j=0; j5; j++) System.out.print(twoDij + " "); System.out.println(); Output: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 When you allocate memory for a multidimensional array, you need only specify the memory for the first (leftmost) dimension. You can allocate the remaining dimensions separately. We can allocates the second dimension manually. SVECW IT DEPT Page 20