Compilererros

Download Report

Transcript Compilererros

Computer Applications
Java
Structure
Terminology
Common Compiler Errors
1
Java Syntax and Semantics
 Syntax
– The formal rules governing how valid instructions are written in
a programming language
 Semantics
– The set of rules that determines the meaning of instructions
written in a programming language
 Conventions
– General agreement or consent; accepted usage, esp. as a
standard of procedure.
2
Types of errors
 There
are three general types of errors:
– Syntax (or “compile time”) errors
» Syntax errors are “grammatical” errors and are detected when
you compile the program
» Syntax errors prevent your program from executing
– Runtime errors
» Runtime errors occur when you tell the computer to do something
illegal
» Runtime errors may halt execution of your program
– Logic errors
» Logic errors are not detected by the computer
» Logic errors cause your results to be wrong
3
Common Compile Time Errors (Syntax)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Mismatched curly braces ({ or } expected).
Mismatched quotations.
Misplaced semicolon.
Improper file name.
Attempting to use variable before initializing it.
(cannot resolve symbol or <identifier> expected)
Mismatched parentheses. ( ( or ) expected)
Missing semicolon. (; expected)
Misspelling printLine method.
Package does not exist.
4
Classes and objects
 Class
– A description of behavior of a group of objects with similar
properties and behaviors
– A pattern for an object
– Contains fields or data values and methods. (Method: A
subprogram that defines one aspect of the behavior of the
class)
 Object
– An entity or thing that is relevant in the context of a
problem
– An instance of a class
5
Classes and Objects
 How
do we create an object from a class?
Instantiation
– Use of an operator called new, takes the class name and
returns an object of the class type.
– Object that is returned is an instance of the class
6
Organization of a class



A class may contain data declarations and methods (and
constructors, which are like methods), but not statements
A method may contain (temporary) data declarations and
statements
A common error:
class Example {
int variable ;
// simple declaration is OK
int anotherVariable= 5; // declaration with initialization is OK
variable = 5;
// statement! This is a syntax error
void someMethod( ) {
int yetAnotherVariable; //declaration is OK
yetAnotherVariable = 5; // statement inside method is OK
}
}
7
Getting started
 Your
programs will be full of errors, of all kinds
 You cannot avoid this, no matter how good you get
 You cannot learn not to make errors--it’s impossible
– But, with practice, you will get a little bit better
 You
can and must learn:
– How to recognize the various types of errors
– How to find and fix them
 What
is important is not avoiding errors, but knowing
how to fix them
8
What to do about errors
 Error
messages are your friends--read them and try to
understand them
 With practice, you can fix most syntax errors almost
immediately
 Runtime and logic errors may take considerably longer
to track down and fix
 Here’s what’s important to remember:
– Everyone makes lots of stupid errors (and almost all errors are
stupid ones--mine included); it’s nothing to be ashamed of
– However, it is not OK to let those errors survive
– Approximately 90% of your time will be spent debugging
9
Syntax errors
 A syntax
error is a “grammatical” error--bad punctuation,
misuse of keywords, etc.
 Syntax error messages tell you two things:
– The line number at which an error was detected
» Usually, this is the line containing the error
» In some cases, the actual error is earlier in the program text
– What the compiler thinks the problem is
» Since the compiler cannot know what you meant, the message is
only a “best guess,” and is sometimes misleading
 Syntax
errors can cascade: An early error can cause
spurious error messages later in the program
– Always fix the earliest message first
– If later messages don’t make sense, try recompiling
10
Example syntax errors



System.out.println("(g1 == g2) = " + (g1 == g2);
– ')' expected
System.out.println("(g1 == g2) = " + (g1 == g2)));
– ’;' expected
a = g1 + g2;
– cannot resolve symbol -- variable a
» a was never declared; or
» a was declared, but not where it can be seen from here

a = 5;
– <identifier> expected
» This is a statement, and statements can only occur inside methods

a = b;
– variable b might not have been initialized
11
Runtime errors
 A runtime
error occurs when your program does
something illegal
– Runtime errors typically stop your program
– Runtime errors can be “caught” by your program, thus allowing
the program to continue running
» We’ll discuss how to do this later in the course
– Runtime errors are usually caused by something the program did
(or failed to do) earlier in execution
»Because the cause of the error is
somewhere else in the program, runtime
errors are usually harder to solve
12
A common runtime error
n
java.lang.NullPointerException
} What kind of error it was
at Test.run(Test.java:22)
at Test.main(Test.java:6)
at __SHELL1.run(__SHELL1.java:6)
at bluej.runtime.ExecServer.suspendExecution(ExecServer.java:187)
at bluej.runtime.ExecServer.main(ExecServer.java:69)
Traceback: How your program got to where the error
was detected (in line 22 of the file Test.java)
The part of the traceback in your code (line 22 of the
file, in your run method, called from line 6 of the
file, in your main method)
The part of the traceback in the Java and BlueJ
system; you can pretty much ignore this part
13
Null pointer exceptions
NullPointerException is one of the most common
runtime errors
 The
– It occurs when you send a message to a null variable (a
non-primitive variable that doesn’t refer to an actual object)
– The null variable causing the problem is always just before a
dot
– Example: g.drawLine(x1, y1, x2, y2);
» If this caused a NullPointerException, the variable g must have
been null
» You probably never initialized g
» Java tries to catch uninitialized variables, but it cannot catch
them all
14
Logic errors
 A logic
error is when your program compiles and runs
just fine, but does the wrong thing
 In very simple programs, logic errors are usually easy
to find and fix, if they occur at all
 In all but the simplest of programs,
– 10% of your time is spent writing the program and fixing the
syntax errors (more if you are still learning the syntax)
– 90% of your time is spent finding and fixing runtime and
logic errors
 Logic
errors can take hours, or even days, to find
– Allocate your time accordingly!
15
Make better use of your time
 While
you cannot avoid making errors, you can prepare
for them
–
–
–
–
Keep your programs as simple as possible
Indent properly so you can see the structure of your code
Comment your programs so you can find things again
Write test cases and use them
» “Write a little, test a little”
– Write assert statements for the things that you “know” cannot
possibly happen
 Programming
is a creative activity, and can be very
enjoyable and satisfying
– For most of us, debugging is not the fun part
16
Approaches to finding errors
 Try
a random change and see if it helps
– “An infinite number of monkeys, given an infinite number of
typewriters, will eventually produce the complete works of
Shakespeare”
– No monkey has ever passed this course
– You can’t afford this approach--it’s stupid and doesn’t work
 Better
approach: Think about what could have caused
the results you see, and then look for where that might
have occurred
– Advantage: Leads you directly to the error
– Disadvantage: Not always possible to figure out what could
have happened
17
Good approaches, I
 Put
in print statements
– Advantage: Helps you see what the program is doing
– Disadvantage: You have to take them out again
 Use
a Debugger
– A debugger is a program that lets you step through your
program line by line and see exactly what it is doing
– Advantages:
» Takes no prior preparation
» Lets you see exactly what the program is doing
– Disadvantages
» You have to learn to use one
 BlueJ has one!
18
Good approaches, II
 Explain
your code to a friend (even if your friend
can’t program)
– Advantage: Forces you to actually look at what you did
– Disadvantage: Requires you to have friends
» In a pinch, even your dog will do (if you can get him to hold still
long enough)
– Note: This is not a violation of academic honesty!
 In
extremis: Throw out the offending code and rewrite
it
– Advantages:
» Usually works
» Usually makes your code simpler
– Disadvantage: Can be psychologically difficult
19
Why such high standards?
 Large
programs are the most complex entities ever
devised by mankind
– Large programs consist of thousands of methods and
hundreds of thousands of lines
– A single error can cause catastrophic failure
– There are a great many examples, from space vehicles
crashing to deaths from badly programmed medical
equipment
– We give partial credit for “mostly working” programs--and,
believe it or not, I think this is generous
20
Conventions Capitalization of Identifiers
 Variables
and methods begin with a lowercase letter
and capitalize each successive English word.
– lenghtInYards
middleInitial
hours
 Class
names begin with an upper case letter but are
capitalized the same as variable names thereafter.
– PayRollFrame
String
MyDataType
 Identifiers
representing named constants are all upper
case with underscores used to separate the English
words
– BOOK_TITLE
OVERTIME
MAX_LENGTH
21
Spaces
 You
should put a single space around every binary
operator, including comparisons and =
 Example: perimeter = 2 * (width + height);
 Do not put spaces just inside parentheses:
perimeter = 2 * ( width + height ); //bad
 These are style rules, not Java rules
– If you break these rules, your program will still compile OK, but
you will lose points if we notice
22
Indentation and spacing



if (x < 10)
___x = x +
} else {
___x = x }
OR:
if (x < 10)
___x = x +
}
else {
___x = x }
{
1;

1;

{
1;

1;

while (x > 0) {
___System.out.println(x);
___x = x - 1;
}
Recommended indentation is from
2 to 4 spaces, but must be
consistent throughout the program
Notice that there is not a space
after println
Most important style rule: If
you are modifying or adding to an
existing program, keep to the
original style (whatever it may be)
23
A Little Terminology
24
Data Types
 Data
is stored internally in memory, externally on disk or
tape or input from an input device
 Data
type determines how the data is represented in the
computer and the kinds of processing the computer can
perform on it.
25
Data Types
 Standard
or built-in data types
– Used frequently and provided by Java
– integer number, real number, characters and boolean
 User-defined
or Complex data types
– These are referred to as classes
26
The String Class
 A string
is a sequence of characters enclosed in double
quotes.
 In Java, a string is an object, an instance of the class
String.
 Examples
– “Introduction to” “Program” “ Design”
 A string
must be typed entirely on one line
 Quotes are not considered parts of the string
27
Declarations – defining terms
 A statement
that associates a name (an identifier) with
a description of an element in a Java program.
- elements : field, a method, a class or a package sot that the
programmer can refer to that item by name.
int minAB;
– Compiler picks a location in memory to be associated with
identifier
28
Declarations
 In
Java, the identifier must be declared before it is used.
 Allows compiler to verify that the use of the identifier is
consistent with what it is declared to be.
– Java is strongly typed. A variable can only contain a value of the
type or class specified in its declaration
 Fields
can be variable or constant
29
Variables
char myChar;
Variable Identifier
myChar
(memory location 111001010101)
VARIABLE
?
VALUE
(char)
DATA TYPE
30
Variables
 A variable
is a location in memory, referenced by an
identifier or name, that contains a data value that can be
changed
 Variable declaration
Modifiers TypeName Identifier, Identifier...;

TypeName – Name of class or type such as char or String
char letter, middleInitial, ch;
OR
char letter;
char middleInitial;
char ch;
31