{"id":95,"date":"2020-12-31T22:26:56","date_gmt":"2020-12-31T22:26:56","guid":{"rendered":"https:\/\/bhiggs.x10hosting.com\/practical-java-programming\/?page_id=95"},"modified":"2021-01-14T17:01:17","modified_gmt":"2021-01-14T17:01:17","slug":"using-the-jdk","status":"publish","type":"page","link":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/using-the-jdk\/","title":{"rendered":"Using the JDK"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a21c3ff42a4a\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a21c3ff42a4a\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/using-the-jdk\/#Using_the_Bare_Java_Software_Development_Kit\" >Using the Bare Java Software Development Kit<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/using-the-jdk\/#Caveats\" >Caveats<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/using-the-jdk\/#Essential_Links\" >Essential Links<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/using-the-jdk\/#The_Basic_Java_Tools\" >The Basic Java Tools<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/using-the-jdk\/#Starting_Out\" >Starting Out<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/using-the-jdk\/#Placing_a_Class_in_a_Package\" >Placing a Class in a Package<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/using-the-jdk\/#Using_Package_Names\" >Using Package Names<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/using-the-jdk\/#Doing_Things_Right\" >Doing Things Right<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Using_the_Bare_Java_Software_Development_Kit\"><\/span>Using the Bare Java Software Development Kit<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Caveats\"><\/span>Caveats<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The first thing I should say about using the bare Java SDK is:<\/p>\n\n\n\n<p class=\"has-white-background-color has-background wp-block-paragraph\">Don&#8217;t do it, unless you absolutely know you want to, and are comfortable with a UNIX-style command line, and other UNIX concepts.&nbsp; Believe me, it&#8217;s not what I would call a user-friendly environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I&nbsp;<strong><em>strongly<\/em><\/strong>&nbsp;recommend a Java IDE for the following reasons:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Java IDEs hide a lot of the user-hostile stuff.&nbsp; In particular, the class path is usually integrated in a more user-friendly manner in an IDE.&nbsp; The class path is, in my experience, the biggest problem students have with Java.<\/li><li>Java IDEs provide a more pleasant, integrated (that&#8217;s the&nbsp;<strong>I<\/strong>&nbsp;in IDE) experience;&nbsp; there&#8217;s a simple to use editor, and lots of ease-of-use features.<\/li><li>Good Java IDEs provide a visual debugger, which is light years ahead of the debugger that comes with the JSDK when it comes to the user interface.&nbsp; This can be invaluable when you&#8217;re stuck trying to figure out why your latest and greatest class doesn&#8217;t work correctly.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">However, if you really, really, insist on using the bare Java SDK, here&#8217;s some help getting started:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Essential_Links\"><\/span>Essential Links<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">One of the first things you should do when you start with Java is go to the Java web site.&nbsp; Point your browser at&nbsp;<a href=\"https:\/\/java.com\/\" data-type=\"URL\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/java.com\/<\/a>&nbsp;. Here you can download the latest version of the Java SDK (Software Development Kit).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I recommend that you register.&nbsp; It&#8217;s free, and the benefits are enormous!&nbsp; This is true whether you plan to use the bare Java SDK or not.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This site is a rich source of lots of Java-related information.&nbsp; Two places, in particular, are particularly useful:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/index.html\" target=\"_blank\">The Java Tutorial.<\/a>\u00a0 Start by clicking on the\u00a0<strong>Your First Cup of Java<\/strong>\u00a0link, and follow the instructions to learn how to start on your platform of choice.<\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.oracle.com\/javase\/1.5.0\/docs\/index.html\" target=\"_blank\">The JDK documentation<\/a>.\u00a0 This is a pure reference, but it&#8217;s going to be where you go for a lot of detailed information about Java.\u00a0 <\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Again, all these links are very valuable no matter how you use your Java development environment.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Basic_Java_Tools\"><\/span>The Basic Java Tools<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s a taste of what it&#8217;s like to use the bare JDK&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are basically two tools you&#8217;ll be using in this course:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><code><strong>javac<\/strong><\/code>&nbsp;&#8212; the Java compiler, which translates Java source files into Java class files.<\/li><li><code><strong>java<\/strong><\/code>&nbsp;&#8212; the Java Application Launcher, which implements a Java Virtual Machine, and executes Java programs.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">There are other tools, but you tend to use them a lot less.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Starting_Out\"><\/span>Starting Out<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine you have written a Java class&nbsp;<code><strong>Foo<\/strong><\/code>, which looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>public class Foo\n{\n  public static void main(String[] args)\n  {\n    System.out.println(\"Hello, Universe!\");\n  }\n}<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Remember that this source must be entered into a file with a name <code><strong>Foo.java<\/strong><\/code> (the file name must be&nbsp;<em>exactly<\/em>&nbsp;the same as the class name, case-sensitive).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You compile this source file with the following command (assuming your current working directory is the same one as that of the&nbsp;<code><strong>.java<\/strong><\/code>&nbsp;file) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>javac Foo.java<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That should work.&nbsp; If you receive no errors, you should find a&nbsp;<code><strong>Foo.class<\/strong><\/code>&nbsp;file in your current working directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, now, you try to run the program using the following command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>java Foo<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Note that you must&nbsp;<strong><em>not<\/em><\/strong>&nbsp;say&nbsp;<strong><code>java Foo.class<\/code><\/strong>.&nbsp; If you do, you will get:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><code><strong>Exception in thread \"main\" java.lang.NoClassDefFoundError: Foo\/class<\/strong><\/code><\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Specifying:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>java Foo<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">will cause the class to run, and the output will be:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Hello, Universe!<\/strong><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Placing_a_Class_in_a_Package\"><\/span>Placing a Class in a Package<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">So far, so good.&nbsp; What if we create a new class&nbsp;<code><strong>Foo2<\/strong><\/code>, that looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>package bar;\n\npublic class Foo2\n{\n  public static void main(String[] args)\n  {\n    System.out.println(\"Hello, Universe!\");\n  }\n}<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The only differences are that the class has a (slightly) different name,&nbsp;<em>and that it now exists inside a named package,&nbsp;<\/em><code><strong>bar<\/strong><\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, let&#8217;s compile it:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>javac Foo2.java<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That works.&nbsp; Now, let&#8217;s try to run it:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>java Foo2<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s what I received when I tried it:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\nException in thread &quot;main&quot; java.lang.NoClassDefFoundError: \n Foo2 (wrong name: bar\/Foo2)\n   at java.lang.ClassLoader.defineClass0(Native Method)\n   at java.lang.ClassLoader.defineClass(ClassLoader.java:537)\n   at java.security.SecureClassLoader.defineClass\n                                       (SecureClassLoader.java:123)\n   at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)\n   at java.net.URLClassLoader.access$100(URLClassLoader.java:55)\n   at java.net.URLClassLoader$1.run(URLClassLoader.java:194)\n   at java.security.AccessController.doPrivileged(Native Method)\n   at java.net.URLClassLoader.findClass(URLClassLoader.java:187)\n   at java.lang.ClassLoader.loadClass(ClassLoader.java:289)\n   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)\n   at java.lang.ClassLoader.loadClass(ClassLoader.java:235)\n   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The notorious&nbsp;<code><strong>NoClassDefFoundError&nbsp;<\/strong><\/code>!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What&#8217;s wrong?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You need to fully qualify the class name with its package name when you run it using the Java Application Launcher.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>java bar.Foo2<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">However, when I tried doing this, I received the following:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\nException in thread &quot;main&quot; java.lang.NoClassDefFoundError: bar\/Foo2\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">So, this isn&#8217;t the right way to handle the case of classes within explicit packages.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Using_Package_Names\"><\/span>Using Package Names<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">So how are you supposed to handle things, when you use package names with classes?&nbsp; Here&#8217;s our&nbsp;<code><strong>Foo2<\/strong><\/code>&nbsp;class again:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>package bar;\n\npublic class Foo2\n{\n  public static void main(String[] args)\n  {\n    System.out.println(\"Hello, Universe!\");\n  }\n}<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">First, we use the following command to compile this class:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>javac -d . Foo2.java<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<code><strong>-d<\/strong><\/code>&nbsp;option specifies the &#8216;destination&#8217;; the directory where the Java compiler will place the class files it produces.&nbsp; In the case where the class is within a specified package, say&nbsp;<code><strong>bar<\/strong><\/code>, the&nbsp;<code><strong>-d<\/strong><\/code>&nbsp;option specifies a base directory;&nbsp; the resulting class file will be placed in a subdirectory of the base directory which has the same name as the package name.&nbsp; The &#8220;<code><strong>-d .<\/strong><\/code>&#8221; means that the destination is the current working directory (the dot means &#8220;current directory&#8221;).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, when we issue the above command, the&nbsp;<code><strong>javac<\/strong><\/code>&nbsp;compiler creates a <code><strong>Foo2.class<\/strong><\/code> file in a subdirectory <strong>bar<\/strong>, below the current working directory.&nbsp; The compiler creates the necessary subdirectory\/ies in order to create the necessary class file(s).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, we can try running the resulting class:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>java bar.Foo2<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">which produces:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Hello, Universe!<\/strong><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This works because:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>We created the class file in the appropriate subdirectory, and<\/li><li>We happen to use a default class path that works in this case.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">If we were to run from a different working directory, things wouldn&#8217;t work so smoothly.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Doing_Things_Right\"><\/span>Doing Things Right<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s what you should be doing:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>For each Assignment (or independent project), create a directory somewhere.&nbsp; For assignment 1, for example, call it, say,&nbsp;<code><strong>Ass1<\/strong><\/code>.&nbsp; This directory will be the base directory for all files related to this project\/assignment.<\/li><li>Below&nbsp;<code><strong>Ass1<\/strong><\/code>, create two subdirectories,&nbsp;<code><strong>src<\/strong><\/code>&nbsp;and&nbsp;<code><strong>classes<\/strong><\/code>.<\/li><li>Specify a class path that includes this classes subdirectory, and set it into the CLASSPATH environment variable.&nbsp; In Microsoft Windows, for example, the class path should be something like:<br><strong>set CLASSPATH=&#8221;C:\/Ass1\/classes&#8221;<\/strong><\/li><li>When you wish to create a new Java class (say&nbsp;<code><strong>Foo2<\/strong><\/code>) within a package, say,&nbsp;<code><strong>bar<\/strong><\/code>, create its source file in a subdirectory of&nbsp;<code><strong>src<\/strong><\/code>, called&nbsp;<strong><code>bar<\/code><\/strong>, creating the&nbsp;<code><strong>bar<\/strong><\/code>&nbsp;subdirectory if necessary.<\/li><li>When you compile a class, use the following command:<br><strong>javac -sourcepath &#8220;C:\/Ass1\/src&#8221; -d &#8220;C:\/Ass1\/classes&#8221; <em>ClassName<\/em>.java<\/strong><br>where &#8216;<em>ClassName<\/em>&#8216; represents the name of the class.&nbsp; Note that we&#8217;re specifying that the destination of Java compilations is the <code><strong>Ass1\/classes<\/strong><\/code> subdirectory. (Here, I&#8217;m using a specific place where these files will reside on a Windows system; if your location is different, change the&nbsp;<code><strong>C:\/Ass1\/src<\/strong><\/code>&nbsp;to a more appropriate value.)&nbsp;&nbsp; This will result in the&nbsp;<code><strong>.class<\/strong><\/code>&nbsp;files being generated in the proper subdirectory below the&nbsp;<code><strong>classes<\/strong><\/code>&nbsp;subdirectory.&nbsp;In addition, I&#8217;m specifying a source path (like a class path, except for source files) that points to the base <code><strong>src<\/strong><\/code> subdirectory. Note that the above command relies on the <strong>CLASSPATH<\/strong> environment variable being set up.<\/li><li>When you run a class, use the following command:<br><strong>java <em>packageName.ClassName<\/em><\/strong><br>which specifies that the class to be run lives in the specified package.Note that the above command relies on the <strong>CLASSPATH<\/strong> environment variable being set up.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Following these rules should allow you to develop a number of Java classes within one or more packages, and keep your sanity!&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note that every IDE enforces somewhat similar rules.&nbsp; It&#8217;s just that you don&#8217;t have to do all the hard work when you use an IDE;&nbsp; they do it for you! <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sure, it takes a little effort to learn the essentials of the IDE, but you get that investment back in spades over many projects!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Using the Bare Java Software Development Kit Caveats The first thing I should say about using the bare Java SDK is: Don&#8217;t do it, unless you absolutely know you want to, and are comfortable with a UNIX-style command line, and other UNIX concepts.&nbsp; Believe me, it&#8217;s not what I would call a user-friendly environment. I&nbsp;strongly&nbsp;recommend [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_eb_attr":"","_uag_custom_page_level_css":"","ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","footnotes":""},"class_list":["post-95","page","type-page","status-publish","hentry","entry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"ocean-thumb-m":false,"ocean-thumb-ml":false,"ocean-thumb-l":false},"uagb_author_info":{"display_name":"Bryan Higgs","author_link":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/author\/bryan\/"},"uagb_comment_info":0,"uagb_excerpt":"Using the Bare Java Software Development Kit Caveats The first thing I should say about using the bare Java SDK is: Don&#8217;t do it, unless you absolutely know you want to, and are comfortable with a UNIX-style command line, and other UNIX concepts.&nbsp; Believe me, it&#8217;s not what I would call a user-friendly environment. I&nbsp;strongly&nbsp;recommend&hellip;","_links":{"self":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/95","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/comments?post=95"}],"version-history":[{"count":10,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/95\/revisions"}],"predecessor-version":[{"id":1301,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/pages\/95\/revisions\/1301"}],"wp:attachment":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalJavaProgramming\/wp-json\/wp\/v2\/media?parent=95"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}