Java 5.0 and ActionScript 3.0 Similarities
I thought there might be some who would like to see the similarities between the Java language and the AS3 language. Enjoy…
This table was produced by Yakov Fain at:
ActionScript 3.0 - Java5.0 Similarities
| Concept/Language Construct | Java 5.0 | ActionScript 3.0 |
| Class library packaging |
.jar |
.swc |
| Inheritance | class Employee extends Person{…} | class Employee extends Person{…} |
| Variable declaration and initialization | String firstName=”John”;Date shipDate=new Date();int i;int a, b=10;
double salary; |
var firstName:String=”John”;var shipDate:Date=new Date();var i:int;var a:int, b:int=10;
var salary:Number; |
| Undeclared variables |
n/a |
It’s an equivalent to the wild card type notation *. If you declare a variable but do not specify its type, the * type will apply.A default value: undefinedvar myVar:*; |
| Variable scopes | block: declared within curly braces, local: declared within a method or a blockmember: declared on the class levelno global variables |
No block scope: the minimal scope is a functionlocal: declared within a functionmember: declared on the class levelIf a variable is declared outside of any function or class definition, it has global scope. |
| Strings | Immutable, store sequences of two-byte Unicode characters | Immutable, store sequences of two-byte Unicode characters |
| Terminating statements with semicolons |
A must |
If you write one statement per line you can omit it. |
| Strict equality operator |
n/a |
===for strict non-equality use!== |
| Constant qualifier | The keyword finalfinal int STATE=”NY”; | The keyword constconst STATE:int =”NY”; |
| Type checking | Static (checked at compile time) | Dynamic (checked at run-time) and static (it’s so called ‘strict mode’, which is default in Flex Builder) |
| Type check operator |
instanceof |
is – checks data type, i.e. if (myVar is String){…}The is operator is a replacement of older instanceof |
| The as operator |
n/a |
Similar to is operator, but returns not Boolean, but the result of expression:var orderId:String=”123”;var orderIdN:Number=orderId as Number;
trace(orderIdN);//prints 123 |
| Primitives | byte, int, long, float, double,short, boolean, char | all primitives in ActionScript are objects.Boolean, int, uint, Number, StringThe following lines are equivalent;
var age:int = 25;
var age:int = new int(25); |
| Complex types |
n/a |
Array, Date, Error, Function, RegExp, XML, and XMLList |
| Array declaration and instantiation | int quarterResults[];quarterResults = new int[4];int quarterResults[]={25,33,56,84}; |
var quarterResults:Array =new Array();orvar quarterResults:Array=[];var quarterResults:Array= [25, 33, 56, 84]; AS3 also has associative arrays that uses named elements instead of numeric indexes (similar to Hashtable). |
| The top class in the inheritance tree |
Object |
Object |
| Casting syntax: cast the class Object to Person: | Person p=(Person) myObject; | var p:Person= Person(myObject);orvar p:Person= myObject as Person; |
| upcasting | class Xyz extends Abc{}Abc myObj = new Xyz(); | class Xyz extends Abc{}var myObj:Abc=new Xyz(); |
| Un-typed variable |
n/a |
var myObject:*var myObject: |
| packages | package com.xyz;class myClass {…} | package com.xyz{class myClass{…}}ActionScript packages can include not only classes, but separate functions as well |
| Class access levels | public, private, protectedif none is specified, classes have package access level | public, private, protectedif none is specified, classes have internal access level (similar to package access level in Java) |
| Custom access levels: namespaces |
n/a |
Similar to XML namespaces.namespace abc;abc function myCalc(){}
or
abc::myCalc(){}
use namespace abc ; |
| Console output | System.out.println(); | // in debug mode onlytrace(); |
| imports | import com.abc.*;import com.abc.MyClass; | import com.abc.*;import com.abc.MyClass;packages must be imported even if the class names are fully qualified in the code. |
| Unordered key-value pairs | Hashtable, MapHashtable friends = new Hashtable();friends.put(”good”, “Mary”);friends.put(”best”, “Bill”); friends.put(”bad”, String bestFriend= friends.get(“best”); // bestFriend is Bill |
Associative ArraysAllows referencing its elements by names instead of indexes.var friends:Array=new Array(); friends[”good”]=”Mary”;friends[”best”]=”Bill”; friends[”bad”]=”Masha”; var bestFriend:String= friends[“best”] friends.best=”Alex”; Another syntax: var car:Object = {make:”Toyota”, model:”Camry”}; trace (car[”make”], car.model); // Output: Toyota Camry |
| Hoisting |
n/a |
Compiler moves all variable declarations to the top of the function, so you can use a variable name even before it’s been explicitly declared in the code. |
| Instantiation objects from classes | Customer cmr = new Customer();Class cls = Class.forName(“Customer”);Object myObj= cls.newInstance(); | var cmr:Customer = new Customer();var cls:Class = flash.util.getClassByName(”Customer”); var myObj:Object = new cls(); |
| Private classes | private class myClass{…} | There is no private classes in AS3. |
| Private constructors | Supported. Typical use: singleton classes. | Not available. Implementation of private constructors is postponed as they are not the part of the ECMAScript standard yet.To create a Singleton, use public static getInstance(), which sets a private flag instanceExists after the first instantiation. Check this flag in the public constructor, and if instanceExists==true, throw an error. |
| Class and file names | A file can have multiple class declarations, but only one of them can be public, and the file must have the same name as this class. | A file can have multiple class declarations, but only one of them can be placed inside the package declaration, and the file must have the same name as this class. |
| What can be placed in a package | Classes and interfaces | Classes, interfaces, variables, functions, namespaces, and executable statements. |
| Dynamic classes (define an object that can be altered at runtime by adding or changing properties and methods). |
n/a |
dynamic class Person {var name:String;}//Dynamically add a variable // and a function
var p:Person = new Person(); p.name=”Joe”; p.age=25; p.printMe = function () { trace (p.name, p.age); } p.printMe(); // Joe 25 |
| function closures | n/a. Closure is a proposed addition to Java 7. | myButton.addEventListener(“click”, myMethod); A closure is an object that represents a snapshot of a function with its lexical context (variable’s values, objects in the scope). A function closure can be passed as an argument and executed without being a part of any object |
| Abstract classes | supported | n/a |
| Function overriding | supported | Supported. You must use the override qualifier |
| Function overloading | supported | Not supported. |
| Interfaces | class A implements B{…}interfaces can contain method declarations and final variables. | class A implements B{…}interfaces can contain only function declarations. |
| Exception handling | Keywords: try, catch, throw, finally, throwsUncaught exceptions are propagated to the calling method. | Keywords: try, catch, throw, finallyA method does not have to declare exceptions.Can throw not only Error objects, but also numbers:throw 25.3;
Flash Player terminates the script in case of uncaught exception. |
| Regular expressions | Supported | Supported |