{"id":4668,"date":"2017-10-23T06:10:40","date_gmt":"2017-10-23T06:10:40","guid":{"rendered":"http:\/\/a1webdesignteam.com\/blog\/?p=4668"},"modified":"2017-10-23T06:10:40","modified_gmt":"2017-10-23T06:10:40","slug":"java-functions","status":"publish","type":"post","link":"https:\/\/a1webdesignteam.com\/blog\/java-functions\/","title":{"rendered":"Java Functions"},"content":{"rendered":"<p>In Java, all function definitions must be inside classes. We also call functions methods. Let&#8217;s look at an example method<\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\"><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Main<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">foo<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token comment\" spellcheck=\"true\">\/\/ Do something here<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<p><code class=\"  language-java\">foo<\/code>\u00a0is a method we defined in class Main. Notice a few things about\u00a0<code class=\"  language-java\">foo<\/code>.<\/p>\n<ul>\n<li><code class=\"  language-java\"><span class=\"token keyword\">static<\/span><\/code>\u00a0means this method belongs to the class Main and not to a specific instance of Main. Which means we can call the method from a different class like that\u00a0<code class=\"  language-java\">Main<span class=\"token punctuation\">.<\/span><span class=\"token function\">foo<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/code>.<\/li>\n<li><code class=\"  language-java\"><span class=\"token keyword\">void<\/span><\/code>\u00a0means this method doesn&#8217;t return a value. Methods can return a single value in Java and it has to be defined in the method declaration. However, you can use\u00a0<code class=\"  language-java\"><span class=\"token keyword\">return<\/span><\/code>\u00a0by itself to exit the method.<\/li>\n<li>This method doesn&#8217;t get any arguments, but of course Java methods can get arguments as we&#8217;ll see further on.<\/li>\n<\/ul>\n<h3>Arguments<\/h3>\n<p>I always like to say that arguments to Java methods are passed by value, although some might disagree with my choice of words, I find it the best way to explain and understand how it works exactly.<\/p>\n<p>By value means that arguments are copied when the method runs. Let&#8217;s look at an example.<\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\"><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">bar<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> num1<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> num2<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<p>Here is a another place in the code, where bar is called<\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\"><span class=\"token keyword\">int<\/span> a <span class=\"token operator\">=<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">int<\/span> b <span class=\"token operator\">=<\/span> <span class=\"token number\">5<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token function\">bar<\/span><span class=\"token punctuation\">(<\/span>a<span class=\"token punctuation\">,<\/span> b<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<p>You can picture in your head that when\u00a0<code class=\"  language-java\"><span class=\"token function\">bar<\/span><span class=\"token punctuation\">(<\/span>a<span class=\"token punctuation\">,<\/span>\u00a0b<span class=\"token punctuation\">)<\/span><\/code>\u00a0is run, it&#8217;s like in the beginning of\u00a0<code class=\"  language-java\">bar<\/code>\u00a0the following two lines are written:<\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\"><span class=\"token keyword\">int<\/span> num1 <span class=\"token operator\">=<\/span> a<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">int<\/span> num2 <span class=\"token operator\">=<\/span> b<span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<p>And only then the rest of the method is run.<\/p>\n<p>This means that\u00a0<code class=\"  language-java\">a<\/code>\u00a0value get copied to\u00a0<code class=\"  language-java\">num1<\/code>\u00a0and\u00a0<code class=\"  language-java\">b<\/code>\u00a0value get copied to\u00a0<code class=\"  language-java\">num2<\/code>. Changing the values of\u00a0<code class=\"  language-java\">num1<\/code>\u00a0and\u00a0<code class=\"  language-java\">num2<\/code>\u00a0will not affect\u00a0<code class=\"  language-java\">a<\/code>\u00a0and\u00a0<code class=\"  language-java\">b<\/code>.<\/p>\n<p>If the arguments were objects, the rules remain the same, but it acts a bit differently. Here is a an example:<\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\"><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">bar2<\/span><span class=\"token punctuation\">(<\/span>Student s1<span class=\"token punctuation\">,<\/span> Student s2<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<p>And here is how we use it<\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\">Student joe <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Student<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"joe\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\nStudent jack <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Student<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"jack\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token function\">bar2<\/span><span class=\"token punctuation\">(<\/span>joe<span class=\"token punctuation\">,<\/span> jack<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<p>Again we can picture the same two lines in the beginning of\u00a0<code class=\"  language-java\">bar2<\/code><\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\">Student s1 <span class=\"token operator\">=<\/span> joe<span class=\"token punctuation\">;<\/span>\r\nStudent s2 <span class=\"token operator\">=<\/span> jack<span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<p>But when we assign objects, it&#8217;s a bit different than assigning primitives.\u00a0<code class=\"  language-java\">s1<\/code>\u00a0and\u00a0<code class=\"  language-java\">joe<\/code>\u00a0are two different references to the same object.\u00a0<code class=\"  language-java\">s1\u00a0<span class=\"token operator\">==<\/span>joe<\/code>\u00a0is true. This means that running methods on\u00a0<code class=\"  language-java\">s1<\/code>\u00a0will change the object\u00a0<code class=\"  language-java\">joe<\/code>. But if we&#8217;ll change the value of\u00a0<code class=\"  language-java\">s1<\/code>\u00a0as a reference, it will not affect the reference\u00a0<code class=\"  language-java\">joe<\/code>.<\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\">s1<span class=\"token punctuation\">.<\/span><span class=\"token function\">setName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Chuck\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\" spellcheck=\"true\">\/\/ joe name is now Chuck as well<\/span>\r\ns1 <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Student<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Norris\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\" spellcheck=\"true\">\/\/ s1 is a new student, different than joe with the name of Norris<\/span>\r\n<span class=\"token comment\" spellcheck=\"true\">\/\/ s1 == joe   is not true anymore<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<h3>Non static methods<\/h3>\n<p>Non static methods in Java are used more than static methods. Those methods can only be run on objects and not on the whole class.<\/p>\n<p>Non static methods can access and alter the field of the object.<\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\"><span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Student<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">private<\/span> String name<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">public<\/span> String <span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token keyword\">return<\/span> name<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">setName<\/span><span class=\"token punctuation\">(<\/span>String name<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span>name <span class=\"token operator\">=<\/span> name<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<p>Calling the methods will require an object of type\u00a0<code class=\"  language-java\">Student<\/code>.<\/p>\n<pre class=\"  language-java\"><code class=\"  language-java\">Student s <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">Student<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\ns<span class=\"token punctuation\">.<\/span><span class=\"token function\">setName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Danielle\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\nString name <span class=\"token operator\">=<\/span> s<span class=\"token punctuation\">.<\/span><span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\nStudent<span class=\"token punctuation\">.<\/span><span class=\"token function\">setName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Bob\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\" spellcheck=\"true\">\/\/ Will not work!<\/span>\r\nStudent<span class=\"token punctuation\">.<\/span><span class=\"token function\">getName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\" spellcheck=\"true\">\/\/ Will not work!<\/span>\r\n<\/code><\/pre>\n<p><a class=\"btn btn-small btn-success execute-code\">Execute Code<\/a><\/p>\n<h3>Summary<\/h3>\n<ul>\n<li>Every Java method has to be within a class<\/li>\n<li>Static methods belong to a class while non-static methods belong to objects<\/li>\n<li>All parameters to functions are passed by value, primitives content is copied, while objects are not copied and some would say &#8216;passed by reference&#8217;<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In Java, all function definitions must be inside classes. We also call functions methods. Let&#8217;s look at an example method public class Main { public static void foo() { \/\/ Do something here } } Execute Code foo\u00a0is a method we defined in class Main. Notice a few things about\u00a0foo. static\u00a0means this method belongs to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4669,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"categories":[25],"tags":[51],"_links":{"self":[{"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/posts\/4668"}],"collection":[{"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/comments?post=4668"}],"version-history":[{"count":0,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/posts\/4668\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/media\/4669"}],"wp:attachment":[{"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/media?parent=4668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/categories?post=4668"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/tags?post=4668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}