We describe the rationale behind the design of key features of Titanium-an explicitly parallel dialect of Java TM for high-performance scientific programming-and our experiences in building applications with the language. Specifically, we address Titanium's Partitioned Global Address Space model, SPMD parallelism support, multi-dimensional arrays and arrayindex calculus, memory management, immutable classes (class-like types that are value types rather than reference types), operator overloading, and generic programming. We provide an overview of the Titanium compiler implementation, covering various parallel analyses and optimizations, Titanium runtime technology and the GASNet network communication layer. We summarize results and lessons learned from implementing the NAS parallel benchmarks, elliptic and hyperbolic solvers using Adaptive Mesh Refinement, and several applications of the Immersed Boundary method.