The course builds on the fundamentals of algorithms and programming from the first semester and introduces students to the Java environment. The course is built on the knowledge of the object-oriented concept of Java. Exceptions, event handling, and building a graphical interface are part of the introduction to the Java language concept. Basic library methods, working with files, and using generic types will be covered. An important topic is multi-threaded application models and their implementation. Practical exercises of hands-on Java skills and knowledge in the form of sub-problems and term papers will be submitted continuously through the source file management system. Assignment scoring consists of points for correctness and efficiency of the code, as well as points taking into account the quality of the source code, its readability and reusability.