Primitive Types
Promotion in Expressions
Assignment Conversion
Type Casting
Arrays
Java Types and Default Values
Arrays with Multiple Dimensions
Strings
Arrays of Characters
String Buffers:
Operators
Flow Control
Classes
Exceptions
Packages, Classes, Interfaces, Methods, Fields, and Objects
Packages and Name Space Resolution
Class Modifiers
Method and Field Modifiers
Next Topic: Object Oriented Programming Concepts
class Test01 { public static void main(String args[]) { byte b = 25; b = b*4; System.out.println("Hello World! b = " + b); } } make Test01.class javac Test01.java Test01.java:4: Incompatible type for =. Explicit cast needed to convert int to byte. b = b*4; ^ 1 error *** Error code 1 make: Fatal error: Command failed for target `Test01.class'If you change byte to int everything works!
class Test02 { public static void main(String args[]) { int b = 25; b = b*4; System.out.println("Hello World! b = " + b); } } make Test02.class javac Test02.java java Test02 Hello World! b = 100
A narrowing conversion is only allowed if:
class Test03 { public static void main(String args[]) { byte b = 25; b = 100; System.out.println("Hello World! b = " + b); } }However, since Java is interpreted and there is no preprocessor, what do you think happens when you try to compile the following:
class Test04 { public static void main(String args[]) { byte b; b = 25*4; System.out.println("Hello World! b = " + b); } } make Test04.class javac Test04.java Test04.java:4: Incompatible type for =. Explicit cast needed to convert int to byte. b = 25*4; ^ 1 error *** Error code 1 make: Fatal error: Command failed for target `Test04.class'This is what happens under JDK 1.0x. However, the JDK 1.1.6 and higher are smart enough to figure this out and it compiles it correctly.
However, if we make a small change:
class Test05 { public static void main(String args[]) { byte b; byte a=25; b = a*4; System.out.println("Hello World! b = " + b); } }We get the error even under JDK 1.1.6. and JDK 1.2.1
You can fix the problem with an explicit cast:
b = (byte)(a*4);If you do an explicit cast and it turns out at runtime that the value of the expression will not fit, the result is silently truncated and no error is produced.
Does the following work?
class Test06 { public static void main(String args[]) { byte b; final byte a=25; b = a*4; System.out.println("Hello World! b = " + b); } }Yes!
Anything can be cast to a String
boolean values cannot be cast to anything else.
You can cast between any arithmetic types (integer, floating point, character)
Basically for objects, you can only cast if one is a subclass of the other.
All variables are given a value when they are created.
There are two classifications of types in Java.
All variables of reference type have default value null.
Unlike in C, arrays are created dynamically.
A declaration does not automatically create the array.
Arrays are created by new.
Array declarations which do not create an array:
int num[];Array declarations which do create an array:
int[] num;
int num[] = new int[10];Array declarations with run time creation:
int[] num = new int[10];
int num[] = {2,4,6,8};
int num[]; int size; size = 20; num = new int[size];The size of an array is known at run time.
Bounds checking is done on all array references.
A program can determine the size of an array:
class Test07 { public static void main(String args[]) { int num[]; int size; int i; size = 3; num = new int[size]; for (i=0; i < num.length; i++) num[i] = i*i; for (i=0; i < num.length; i++) System.out.println("num[" + i + "] = " + num[i]); } } java Test07 num[0] = 0 num[1] = 1 num[2] = 4
Consider the following array:
Point[] A; A = new Point[6]; for (int i=0; i < 6; i++) A[i] = new Point(i,i*i);Point is a simple class with the integer variables, x and y. It is initialized like this:
i x y 0 0 0 1 1 1 2 2 4 3 3 9 4 4 16 5 5 25What is the meaning of the following:
i x y 0 0 0 1 1 1 2 2 4 3 3 9 4 2 4 5 5 25What are the values after A[4].x = 50?
Click Here to run this applet.
import java.awt.*; import java.awt.event.*; import java.applet.*; public class Test08 extends Applet implements ActionListener { Point[] A; int A_size; Panel p; Button Init; Button Copy1; Button Copy2; Button Set2; Button Set4; public void init() { setLayout(new BorderLayout()); p = new Panel(); p.setLayout(new GridLayout(1,5)); p.add(Init = new Button("Init")); p.add(Copy1 = new Button("Copy 1")); p.add(Copy2 = new Button("Copy 2")); p.add(Set2 = new Button("Set 2")); p.add(Set4 = new Button("Set 4")); add("South",p); A_size = 10; A = new Point[A_size]; initialize(); Init.addActionListener(this); Copy1.addActionListener(this); Copy2.addActionListener(this); Set2.addActionListener(this); Set4.addActionListener(this); setBackground(new Color(245,245,245)); Init.setBackground(Color.cyan); Copy1.setBackground(Color.yellow); Copy2.setBackground(Color.yellow); Set2.setBackground(Color.pink); Set4.setBackground(Color.pink); repaint(1); } void initialize() { for (int i=0; i < A_size; i++) A[i] = new Point(i,i*i); } void copy_points_1(int i, int j) { A[i] = A[j]; } void copy_points_2(int i, int j) { A[i].x = A[j].x; A[i].y = A[j].y; } void set_points(int i, int x, int y) { A[i].x = x; A[i].y = y; } public void paint(Graphics g) { int y; y = 15; g.drawString("i",10,y); g.drawString("x",30,y); g.drawString("y",50,y); for (int i=0;i < A_size;i++) { y = i*15+30; g.drawString(i+":",10,y); g.drawString(A[i].x+" ",30,y); g.drawString(A[i].y+" ",50,y); } g.setColor(Color.blue); g.drawString("Init:",80,50); g.drawString("Initialize array to A[i].x=i and A[i].y=i*i",140,50); g.drawString("Copy 1:",80,75); g.drawString("A[4] = A[2]",140,75); g.drawString("Copy 2:",80,100); g.drawString("A[4].x = A[2].x and A[4].y = A[2].y",140,100); g.drawString("Set 2:",80,125); g.drawString("A[2].x = 10 and A[2].y = 30",140,125); g.drawString("Set 4:",80,150); g.drawString("A[4].x = 50 and A[4].y = 80",140,150); } public void actionPerformed (ActionEvent e) { if (e.getSource() == Init) { initialize(); } else if (e.getSource() == Copy1) { copy_points_1(4,2); } else if (e.getSource() == Copy2) { copy_points_2(4,2); } else if (e.getSource() == Set2) { set_points(2,10,30); } else if (e.getSource() == Set4) { set_points(4,50,80); } repaint(1); } }
C only has one-dimensional arrays, but you can have arrays of arrays giving you the functionality of multi-dimensional arrays. In C you would do something like this:
double matrix[10][20]; int i,j; for (i=0;i<10;i++) for (j=0;j<20;j++) matrix[i][j] = i+j;Some languages allow you to use multi-dimensional array syntax such as matrix[i,j] but not C or Java.
Like C, Java only has one-dimensional arrays.
class Test09 { public static void main(String args[]) { double matrix[][]; byte[][] bytematrix = {{2,3,4},{6,8,10}}; matrix = new double[3][12]; int i,j; System.out.println("matrix has lengths " + matrix.length + " and " + matrix[0].length); System.out.println("bytematrix has lengths " + bytematrix.length + " and " + bytematrix[0].length); for (i=0; i<2; i++) for (j=0; j<3; j++) System.out.println( "bytematrix[" + i + "][" + j + "] = " + bytematrix[i][j]); } } java Test09 matrix has lengths 3 and 12 bytematrix has lengths 2 and 3 bytematrix[0][0] = 2 bytematrix[0][1] = 3 bytematrix[0][2] = 4 bytematrix[1][0] = 6 bytematrix[1][1] = 8 bytematrix[1][2] = 10
class Test10 { public static void main(String args[]) { String str1 = "This is a string"; String str2; String str3; String str4; String str5; int i = 5; char fourth; System.out.println("str1: " + str1); System.out.println("str1 has length " + str1.length()); str2 = str1 + i; System.out.println("str2: " + str2); str3 = "This is" + " a string"; str4 = " a string"; str5 = "This is" + str4; System.out.println("str3: " + str3); System.out.println("str5: " + str5+"\n"); if (str1.equals(str3)) System.out.println("str1 equals str3"); else System.out.println("str1 and str3 are different"); if (str1 == str3) System.out.println("str1 == str3"); else System.out.println("str1 != str3"); if (str1.equals(str5)) System.out.println("str1 equals str5"); else System.out.println("str1 and str5 are different"); if (str1 == str5) System.out.println("str1 == str5"); else System.out.println("str1 != str5"); str1 = "This is a new string 1"; System.out.println("\nstr1: " + str1); if (str1.equals(str3)) System.out.println("str1 equals str3"); else System.out.println("str1 and str3 are different"); if (str1 == str3) System.out.println("str1 == str3"); else System.out.println("str1 != str3"); fourth = str1.charAt(3); System.out.println( "\nThe fourth character in str1 is " + fourth); } } str1: This is a string str1 has length 16 str2: This is a string5 str3: This is a string str5: This is a string str1 equals str3 str1 == str3 str1 equals str5 str1 != str5 str1: This is a new string 1 str1 and str3 are different str1 != str3 The fourth character in str1 is s
class Test11 { public static void main(String args[]) { int numargs; int i; numargs = args.length; System.out.println( "Number of command line arguments: " + numargs); for (i=0; i< numargs; i++) System.out.println(" " + i + ": " + args[i]); } } java Test11 Number of command line arguments: 0 java Test11 abc def ghij Number of command line arguments: 3 0: abc 1: def 2: ghij java Test11 abc "def ghij" Number of command line arguments: 2 0: abc 1: def ghij
class Test12 { public static void main(String args[]) { String str1 = "A string"; String str2; char arr[]; int strlen; int i; strlen = str1.length(); System.out.println("str1: " + str1); System.out.println("str1 has length " + strlen); arr = new char[strlen]; str1.getChars(0,strlen,arr,0); for (i=0; i< strlen; i++) System.out.println(" " + i + ": " + arr[i]); arr[2] = 'S'; str2 = String.copyValueOf(arr); System.out.println("str2: " + str2); } } java Test12 str1: A string str1 has length 8 0: A 1: 2: s 3: t 4: r 5: i 6: n 7: g str2: A String
class Test13 { public static void main(String args[]) { StringBuffer mystrbuf = new StringBuffer(); String str1 = "A string of any size"; String str2 = " Another string of any length"; String str3; System.out.println("str1: " + str1); System.out.println("str2: " + str2); mystrbuf.append(str1); mystrbuf.append(str2); str3 = mystrbuf.toString(); System.out.println("str3: " + str3); } } java Test13 str1: A string of any size str2: Another string of any length str3: A string of any size Another string of any length
Here are a few of the differences.
double arr[][]; outer: for (i=0; i < arr.length; i++) { for (j=0; i < arr[0].length; j++) { if (arr[i][j] == val) { foundit = true; break outer; } } }Like in C++, you can declare a variable in the initialization section of a for loop, but the scope of this variable is the body of the for loop.
Note the two constructors for the class Point.
class DPoint { protected double x; protected double y; DPoint (double x, double y) { this.x = x; this.y = y; } DPoint () { x = 0; y = -1; } public void show () { System.out.println("("+x+","+y+")"); } } class Test14 { public static void main(String args[]) { DPoint p1; DPoint p2; p1 = new DPoint(3.5, 4.7); p1.show(); p2 = new DPoint(); p2.show(); } } java Test14 (3.5,4.7) (0.0,-1.0)The class Point3D extends the class DPoint.
class Point3D extends DPoint { protected double z; Point3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } public void show() { System.out.println("("+x+","+y+","+z+")"); } } class Test15 { public static void main(String args[]) { Point3D p1; p1 = new Point3D(3, 4, 9); p1.show(); } } java Test15 (3.0,4.0,9.0)
This cannot happen in Java.
In C under Unix, system errors are handled using errno.
Java handles these with exceptions.
A method which can cause an exception either handles it itself or can throw the exception to the calling method.
Examples of exceptions:
try { c = a/b; } catch(ArithmeticException e) { System.out.println("Divide by 0"); }
The code in an object is made up of methods.
The data is contained in fields.
A class is a description of the methods and fields of a collection of objects.
A constructor is a special method in a class which is used to initialize an object when the object is created.
An interface contains constants and method prototypes.
A class can extend another class and implement any number of interfaces.
A package is a collection of classes.