Access to Names Namespaces Scopes Access privileges Jan 13 2019 Overview In Java you name various things classes methods variables etc Sometimes you can refer to these things by name but other times Java gives you an error You need to know when you can refer to something by name and when you can t You also need to know how to refer to things Java s rules are complex but they are not arbitrary once you understand them they do make sense 2 Part I Namespaces Jan 13 2019 Names are not unique Hi My name is Mike Smith My name is Mike Smith Hello I m Mike Smith 4 Variable names int card int card char card String card 8 2 Q How do we find the card we want refers to Jack of clubs 5 Declarations Variables are declared like this access static type name value Examples int m public double e 2 718281828459045 static final int ONE 1 TWO 2 THREE 3 public static boolean pluggedIn Once we declare some variables where can we use them Java s rules are quite complex but it s very important to understand them 6 Declare a variable only once public class Test public static void main String args int var 5 double var 8 33 System out println var var is already defined in main java lang String 7 A little puzzle public class main int main 5 public static void main String args main main new main System out print main This is a legal program what does it print Answer main ecf76e Next question why 8 Namespaces Java figures out what kind of thing a name refers to and puts it in one of six different namespaces package names type names field names method names local variable names including parameters labels 9 The puzzle solved public class main type name int main 5 field name public static void main String args method name main main new main local names incl args System out print main Java prints out object main ecf76e in local variable main We haven t talked about package names or labels Note that this is terrible style 10 Another little puzzle public class Test static int five return 5 public static void main String args System out print five cannot resolve symbol symbol variable five location class Test Answer five is a method but five looks like a local variable 11 What you should remember A namespace is a place that Java keeps track of names Java uses six different namespaces If you name things intelligently and don t use the same name for different things you don t have to worry much about namespaces 12 Part II Scope Jan 13 2019 Scope The scope of a name is the part of the program in which the name is visible In Java scope rules apply to single methods Variables declared in a method can only be used within that method you cannot ever use them anywhere outside the method Between classes we use access rules rather than scope rules 14 Methods may have local variables A method may have local method variables Formal parameters are a kind of local variable int add int m int n int sum m n return sum m n and sum are all local variables The scope of m n and sum is the method These variables can only be used in the method nowhere else The names can be re used elsewhere for other variables 15 Compound statements and blocks A compound statement consists of zero or more statements inside braces A block consists of zero or more statements or declarations inside braces Examples temp x x y y temp Example int temp x x y y temp This distinction is not important in Java I ll just use the terms interchangeably 16 Blocks occur in methods The braces in a class declaration do not indicate a compound statement public class MyClass not a block Elsewhere braces do indicate a compound statement int absoluteValue int n if n 0 return n else return n 17 Declarations in a class The braces in a class declaration do not indicate a block or compound statement public class MyClass not a block int foo instance variable static int bar class variable Instance variables and class variables are available throughout the entire class that declares them Java doesn t care in what order you declare things However declarations with initializations must precede use of their value Example int half whole 2 int whole 100 is not legal It s usually good style to put variable declarations first then constructors then methods 18 Declarations in a method The scope of formal parameters is the entire method The scope of a variable in a block starts where you define it and extends to the end of the block if x y int larger x else int larger y return larger scope of larger larger scope of a different larger larger Illegal not declared in current scope 19 Nested scopes int fibonacci int limit int first 1 int second 1 while first 1000 System out print first int next first second first second second next nex t System out println second first limit 20 The for loop The for loop is a special case You can declare variables in the for statement The scope of those variables is the entire for loop This is true even if the loop is not a block void multiplicationTable for int i 1 i 10 i for int j 1 j 10 j System out print i j System out println j i 21 Duplicate definitions void holeInScope int i 0 for int i 0 i 10 i illegal System out println i void holeInScope for int i 0 i 10 i System out println i for int i 0 i 10 i legal System out println i public class Scope int i void holeInScope for int i 0 i 10 i legal System out println i 22 A common error class Something String example public static void main String args String example xyz testPrint static void testPrint System out println example Output null Why Local variables shadow class variables with the same name The problem is harder to notice in a longer program 23 What you should remember Names of variables constructors or methods declared anywhere in a class are available everywhere within the class order doesn t matter Formal parameters of a method are available everywhere within the method Variables declared in a block are available from where they are declared to the end of that block Variables declared in a for loop are available within the for loop 24 Part III Access privileges Jan 13 2019 Packages directories folders A public class must be put in a file of the same name Similarly if you use a package statement the file must be in a directory folder of the same name Example public class Test must be saved in a file named Test java Example If you specify package assignment 2 then it must be in a directory named assignment 2 Only large programs should be …
View Full Document
Unlocking...