Docstoc

PACKAGE

Document Sample
PACKAGE Powered By Docstoc
					1.00 Lecture 11
 Scope and Access
                 Variable Lifecycles

• Instance (or object) variables
  – Created when their containing object is created
  – Initialized to default if not explicitly initialized
     • 0 for numbers, false for boolean, null to objects
  – Destroyed when Java® garbage collector finds there
    are no remaining active references to object
• Static (or class) variables
  – Created when class is first used in program
  – Initialized to default if not explicitly initialized
     • 0 for numbers, false for boolean, null to objects
  – Usually exist for rest of program (unless unloaded)
• Local variables (or block variables)
  – Created in the statement where they’re defined
  – Not initialized by default. Contain unpredictable data
  – Destroyed when block is exited (at ending brace )
                   Variable Scope

• Scope: limiting the parts of the program where
  a variable or method is defined and visible
  – Prevents collisions between variables and methods
    in different parts of a program
     • Variables are the big concern, methods are lesser problem
  – Limits effects of changes to smallest possible
    module or scope
  – Lets multiple people work on large programs
    simultaneously
  – Allows testing, bug fixing, maintenance to be done
    while limiting the new bugs introduced
    Scope: Variables, Methods
• Local variables (in a method or block)
  – Exist from point of definition to end of block
    • Blocks are defined by curly braces{ }
    • Blocks are most often used to define:
       – Method body
       – Multiple statements in if-else and loop operations
  – Local variables exist only within own method
    • No access is given to any other method
  – If local and instance variable have same name,
    the local variable hides the instance variable:
    • Access the instance variable as:
      this.variableName;
       Access: Variables, Methods

• Instance and static variables and methods (in
   a class) have 4 access modifiers:
  – Private: Access only to own class’ methods
     • Data fields should be private, almost always
  – Public: Access to all methods, all classes
     • Methods intended for other class’ use are public
     • Methods for internal use only are private
  – Package: Access to methods of classes in same
    package (a package is a group of classes)
    • This is the default, alas. Always specify scope explicitly
    • No ‘package’ keyword; it’s the default with no keyword
  – Protected: Used with inheritance (covered later)
    • Like a private variable, except it’s visible to derived or
      subclasses (and, in Java®, to other classes in package)
             Access: Packages

• If you add, at the top of your program package
  packageName;
 – This will place the classes in your source file into
   a package, along with any other source files with
   the same package declaration at the top
    • Packages are placed in folders in your filesystem in
      Forte and on your Windows PC or Athena workstation
 – These classes will then have access to each
   others’ package-access methods and data fields
  – Use Forte’s New Package feature as convenience
• To use the package in another class, add at
  the top of that class:
  import packageName.*;
              Package Example
package Lecture11PkgClass;

public class PkgClass {
   public int publicInt;
   private int privateInt;
   int packageInt;                           // Package access
   public PkgClass(int pu, int pr, int pa) {
         publicInt= pu;
         privateInt= pr;
         packageInt= pa;
    }
   public void publicPrint( ) {
         System.out.println("Public");
                         }
                         private void privatePrint() {
          System.out.println("Private");
    }
    void packagePrint() {                     // Package access
          System.out.println("Package");
    }
}
           Package Test Class 1
package Lecture11PkgClass;            // In same package

public class PkgTest {
                    public static void main(String[ ] args) {
                       PkgClass object1= new PkgClass(1, 2,
                3);
                       int pu= object1.publicInt;
                       int pr= object1.privateInt;
                       int pa=object1.packageInt;
                         object1.publicPrint();
                         object1.privatePrint();
                       object1.packagePrint();
                       System.exit(0);
     }
}

// Which statements will not compile?
          Package Test Class 1
package Lecture11PkgClass;             // In same package

public class PkgTest {
                     public static void main(String[ ] args) {
                         PkgClass object1= new
                PkgClass(1, 2, 3);
                         int pu= object1.publicInt;
//       int pr= object1.privateInt;    No access!
         int pa= object1.packageInt;
         object1.publicPrint();
//       object1.privatePrint();        No access!
         object1.packagePrint();
         System.exit(0);
     }
}
            Package Test Class 2
package Lecture11TestPkg;       // Different package (or none)

import Lecture11PkgClass.*;         // Import desired package

public class PkgTest {
                   public static void main(String[ ] args) {
                       PkgClass object1= new PkgClass(1, 2,
               3);
                       int pu= object1.publicInt;
                       int pr= object1.privateInt;
                       int pa=object1.packageInt;
                       object1.publicPrint();
                       object1.privatePrint();
                       object1.packagePrint();
                       System.exit(0);
                    }
}
             Package Test Class 2
package Lecture11TestPkg;          // Different package (or none)

import Lecture11PkgClass.*;            // Import desired package

public class PkgTest {
                    public static void main(String[ ] args) {
                        PkgClass object1= new PkgClass(1, 2, 3);
                        int pu= object1.publicInt;
//      int pr= object1.privateInt;     No access
//      int pa= object1.packageInt;     No access
        object1.publicPrint();
//      object1.privatePrint();         No access
//      object1.packagePrint();         No access
        System.exit(0);
     }
}
      Searching packages

• Java® always looks in the default
  package for classes
• searching imported packages of form
  java.util.Vector-
• A classes's full name can be used, as
  in
  Vector v = new java.util.Vector();
           Inner classes
• Java® allows you to define classes
   within another class
• An inner class is only defined within
   its outer class
• Inner classes cannot have static
  members
    Inner class example

public class TopLevelClass {
  private int x;
  // more code here
  class InnerClass {
     private int y;
     y=x
     // more code here
   }
}
public class TopLevelClass {
                    private int x=4;
                    public static void main(String[ ] arg)
                {
                          new TopLevelClass();}
                    public TopLevelClass() {
                          InnerClass inst1 = new
                InnerClass();
                         System.out.println("Outer =
                "+x+ "Inner= " +
              inst1.y);
                         x = 5;
                         InnerClass inst2 = new
                InnerClass();
        System.out.println("Outer = "+x+ "Inner = “
               inst2.y);
     }

    private class InnerClass {
        private int y;
        public InnerClass() {
                     Uses for inner classes

           • Sometimes used for very specialized
             classes that aren't intended for reuse
           • Example: Items that are intended to
             be used on a list, where each item is
             an instance of an inner class.




Java® is a trademark or registered trademark of Sun Microsystems, Inc. In the United States and other countries.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:7
posted:9/30/2012
language:English
pages:18