Yes, you can declare a local reference variable using a type parameter, so your "T obj1" line is indeed valid syntax. But type parameters are always object types (i.e. class or interface), so obj1 will never be a primitive.
However, "new T()" is not allowed. Type parameters are only for compile-time (i.e. static) type checking, but they are "erased" during compilation and do not exist at runtime. As a result of this type erasure, the program does not know what T is at run-time, so it can't instantiate an object of type T. (This is similar to the other question you posed regarding the ClassCastException with toArray()'s return value.)