07-01 Java 封装

前端之家收集整理的这篇文章主要介绍了07-01 Java 封装前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1:成员变量和局部变量的区别
方法外 局部变量:在方法定义中或者方法声明上 B:在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 C:生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法调用而存在,随着方法调用完毕而消失 D:初始化值不同 成员变量:有默认初始化值
    注意事项:
        局部变量<a href="https://www.jb51.cc/tag/mingcheng/" target="_blank" class="keywords">名称</a>可以和成员变量<a href="https://www.jb51.cc/tag/mingcheng/" target="_blank" class="keywords">名称</a>一样,在<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>中使用的时候,采用的是就近原则。

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> Varialbe {
<span style="color: #008000;">//<span style="color: #008000;">成员变量
<span style="color: #008000;">//<span style="color: #008000;">int num = 10;
<span style="color: #0000ff;">int num; <span style="color: #008000;">//<span style="color: #008000;">0

<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;int num2 = 20; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;局部变量
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;可能尚未初始化变量num2</span>
    <span style="color: #0000ff;"&gt;int</span> num2; <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;没有默认值
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; int num2 = 20;</span>
    System.out.println(num2);<span style="color: #ff0000;"&gt;//这里报错,num2没有默认值</span>

    <span style="color: #0000ff;"&gt;int</span> num = 100<span style="color: #000000;"&gt;;
    System.out.println(num);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> VariableDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
Varialbe v = <span style="color: #0000ff;">new<span style="color: #000000;"> Varialbe();

    System.out.println(v.num); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;访问成员变量</span>

<span style="color: #000000;">
v.show();

}

}

 

2:类作为形式参数的问题
如果你看到一个方法需要的参数是一个类名,就应该知道这里实际需要的是一个具体的对象。

sum( a, a +<span style="color: #008000;">//<span style="color: #008000;">形式参数是引用类型
<span style="color: #0000ff;">class
<span style="color: #000000;"> Student {
<span style="color: #0000ff;">public
<span style="color: #0000ff;">void
<span style="color: #000000;"> show() {
System.out.println(
"我爱学习"<span style="color: #000000;">);
}
}

<span style="color: #0000ff;">class<span style="color: #000000;"> StudentDemo {
<span style="color: #ff0000;">//如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
<span style="color: #0000ff;">public <span style="color: #0000ff;">void method(<span style="color: #ff0000;">Student s) { <span style="color: #ff0000;">//调用的时候,把main方法中的s的地址传递到了这里 Student s = new Student();
<span style="color: #000000;"> s.show();
}
}

<span style="color: #0000ff;">class<span style="color: #000000;"> ArgsTest {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">形式参数是基本类型的调用
Demo d = <span style="color: #0000ff;">new<span style="color: #000000;"> Demo();
<span style="color: #0000ff;">int result = d.sum(10,20<span style="color: #000000;">);
System.out.println("result:"+<span style="color: #000000;">result);
System.out.println("--------------"<span style="color: #000000;">);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;形式参数是引用类型的<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;需求:我要<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>StudentDemo类中的method()<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
    StudentDemo sd = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; StudentDemo();
    </span><span style="color: #ff0000;"&gt;//创建学生对象</span>
    Student s = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Student();
    sd.method(s); </span><span style="color: #ff0000;"&gt;//把s的地址给到了这里</span>

<span style="color: #000000;"> }
}

3:匿名对象

匿名对象的应用场景: A:<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a><a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,仅仅只<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>一次的时候。 <span style="color: #ff0000;"&gt;注意:<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>多次的时候,不适合。因为会重新<a href="https://www.jb51.cc/tag/shengcheng/" target="_blank" class="keywords">生成</a>对象</span> 那么,这种匿名<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>有什么好处吗? <span style="color: #ff0000;"&gt; 有,匿名对象<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>完毕就是<a href="https://www.jb51.cc/tag/laji/" target="_blank" class="keywords">垃圾</a>。可以被<a href="https://www.jb51.cc/tag/laji/" target="_blank" class="keywords">垃圾</a>回收器回收。</span> B:<span style="color: #ff0000;"&gt;匿名对象可以作为实际参数传递

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> Student {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show() {
System.out.println("我爱学习"<span style="color: #000000;">);
}
}

<span style="color: #0000ff;">class<span style="color: #000000;"> StudentDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> method(Student s) {
s.show();
}
}

<span style="color: #0000ff;">class<span style="color: #000000;"> NoNameDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">带名字的调用
Student s = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();
s.show();
s.show();
System.out.println("--------------"<span style="color: #000000;">);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;匿名对象
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;new Student();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;匿名对象<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a><a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
    <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Student().show();
    </span><span style="color: #0000ff;"&gt;new</span> Student().show(); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;这里其实是重新创建了一个新的对象</span>
    System.out.println("--------------"<span style="color: #000000;"&gt;);


    </span><span style="color: #ff0000;"&gt;//匿名对象作为实际参数传递</span>
    StudentDemo sd = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; StudentDemo();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;Student ss = new Student();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;sd.method(ss); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;这里的s是一个实际参数
    </span><span style="color: #ff0000;"&gt;//匿名对象
    sd.method(new Student());

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;在来一个</span>
    <span style="color: #ff0000;"&gt;new StudentDemo().method(new</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt; Student());</span>
 }

}

4:封装和private
12代码的复用性 C:提高代码的安全性 (34方法,private修饰成员变量

<span style="color: #000000;">private关键字(掌握)
(1<span style="color: #000000;">)私有的意义,可以修饰成员变量和成员方法
(2<span style="color: #000000;">)特点:
被private修饰的后的成员只能在本类中被访问
(3<span style="color: #000000;">)private的应用:
以后再写一个类的时候:
把所有的成员变量给private了
提供对应的getXxx()/setXxx()方法

 

 

private的引出

方法:show()方法
我们在使用这个案例的过程中,发现了一个问题:
    通过对象去给成员变量赋值,可以赋值一些非法的数据。
    这是不合理的。
    应该是这个样子的:在赋值之前,先对数据进行判断。
    判断到底在哪里做比较合适呢?
    StudentDemo类是一个测试类,测试类一般只创建对象,<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a><a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>。    
    所以,这个判断应该定义在Student类中。
    而我们在成员变量的位置可不可以进行数据判断呢?
    是不可以的,因为做数据校验,必须要依靠一些逻辑语句。
    逻辑语句是应该定义在<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>中的,所以,我们最终决定在Student类中提供一个<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>
    来对数据进行校验。

按照我们前面的分析,我们给出了一个<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>进行校验。
但是呢,它偏偏不<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a><a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>来赋值,还是直接赋值了,
这样我们的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>就没有起到作用。
我就应该要求你必须使用我的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,而不能直接<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>成员变量赋值。
<span style="color: #ff0000;"&gt;怎么去强制要求不能直接使用成员变量呢?
    针对这种情况,Java就提供了一个关键字 private

private:私有的。可以修饰成员变量和成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>。
    注意:被private修饰的成员只能在本类中访问。

其实我讲到现在讲解的是一个封装的思想。
封装:是指隐藏对象的<a href="https://www.jb51.cc/tag/shuxing/" target="_blank" class="keywords">属性</a>和实现细节,仅对外提供公共访问方式。

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> Student {
<span style="color: #008000;">//<span style="color: #008000;">姓名
<span style="color: #000000;"> String name;
<span style="color: #008000;">//<span style="color: #008000;">年龄
<span style="color: #ff0000;">private <span style="color: #0000ff;">int<span style="color: #000000;"> age;

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;写一个<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>对数据进行校验</span>
<span style="color: #008000;"&gt;/*</span><span style="color: #008000;"&gt;
    返回值类型:void
    参数列表:int a
</span><span style="color: #008000;"&gt;*/</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> setAge(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; a) {
    </span><span style="color: #0000ff;"&gt;if</span>(a < 0 || age > 120<span style="color: #000000;"&gt;) {
        System.out.println(</span>"你给的年龄有问题"<span style="color: #000000;"&gt;);
    }</span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; {
        age </span>=<span style="color: #000000;"&gt; a;
    }
}


</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;show()<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,<a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a>所有成员变量值</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() {
    System.out.println(</span>"姓名:"+<span style="color: #000000;"&gt;name);
    System.out.println(</span>"年龄:"+<span style="color: #000000;"&gt;age);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> StudentDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建学生对象
Student s = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();
s.show();
System.out.println("--------------"<span style="color: #000000;">);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;给成员变量赋值</span>
    s.name = "林青霞"<span style="color: #000000;"&gt;;
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;s.age = 27;</span>
    s.setAge(27<span style="color: #000000;"&gt;);
    s.show();
    System.out.println(</span>"--------------"<span style="color: #000000;"&gt;);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;给age赋值
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;s.age = -27; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;这个数据是不合理的
    </span><span style="color: #ff0000;"&gt;//通过<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>给值</span>
    s.setAge(-27);<span style="color: #ff0000;"&gt;//你给的年龄有问题</span>

<span style="color: #000000;"> s.show();
System.out.println("--------------"<span style="color: #000000;">);
}
}

封装和private的使用

方法 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;姓名<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>值</span> <span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; String getName() { </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; name; } </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;姓名设置值</span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; setName(String n) { name </span>=<span style="color: #000000;"&gt; n; } </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;年龄<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>值</span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; getAge() { </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; age; } </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;年龄赋值</span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> setAge(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; a) { age </span>=<span style="color: #000000;"&gt; a; }

}

<span style="color: #008000;">//<span style="color: #008000;">测试类
<span style="color: #0000ff;">class<span style="color: #000000;"> StudentTest {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建学生对象
Student s = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;使用成员变量
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>:被私有修饰了,外界不能直接访问了
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;System.out.println(s.name+"---"+s.age);</span>
    System.out.println(s.getName()+"---"+<span style="color: #000000;"&gt;s.getAge());

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;给成员变量赋值
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;s.name = "林青霞";
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;s.age = 27;
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;通过<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>给赋值</span>
    <span style="color: #ff0000;"&gt;s.setName("林青霞");
    s.setAge(27</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt;);</span>
    System.out.println(<span style="color: #ff0000;"&gt;s.getName()</span></span><span style="color: #ff0000;"&gt;+"---"+</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt;s.getAge()</span>);
}

}

6:this关键字和内存图解
1调用方法,该方法内部的this就代表那个对象 (2解决了局部变量隐藏成员变量的问题 B:其实this还有其他的应用,明天讲解。

this关键字使用

代码改进版
this:哪个对象<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>那个<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,this就代表那个对象

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> Student {
<span style="color: #0000ff;">private<span style="color: #000000;"> String name;
<span style="color: #0000ff;">private <span style="color: #0000ff;">int<span style="color: #000000;"> age;

</span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt; String</span> getName() {
    </span><span style="color: #0000ff;"&gt;return</span> name; <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;这里其实是隐含了this,this.name</span>

<span style="color: #000000;"> }

</span><span style="color: #0000ff;"&gt;public</span><span style="color: #ff0000;"&gt; void</span><span style="color: #000000;"&gt; setName(String name) {
    </span><span style="color: #ff0000;"&gt;this.name =</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt; name;</span>
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; getAge() {
    </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; age;
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> setAge(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
    </span><span style="color: #ff0000;"&gt;this.age =</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt; age;</span>
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> StudentTest2 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建一个对象
Student s1 = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();
s1.setName("林青霞"<span style="color: #000000;">);
s1.setAge(27<span style="color: #000000;">);
System.out.println(s1.getName()+"---"+<span style="color: #000000;">s1.getAge());

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建第二个对象</span>
    Student s2 = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Student();
    s2.setName(</span>"刘意"<span style="color: #000000;"&gt;);
    s2.setAge(</span>30<span style="color: #000000;"&gt;);
    System.out.println(s2.getName()</span>+"---"+<span style="color: #000000;"&gt;s2.getAge());
}

}

this 内存图解:

 

 7:构造方法

7方法(掌握) (12方法名和类名相同 B:没有返回值类型,连void都不能有 C:没有返回值
    思考题:构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>中可不可以有return语句呢</span>?<span style="color: #000000;"&gt;
    可以。而是我们写成这个样子就OK了:</span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt;;
    其实,在任何的void类型的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>的最后你都可以写上:</span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt;;
(</span>3<span style="color: #000000;"&gt;)构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>的注意事项
    A:如果我们没写构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,系统将提供一个默认的无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>
    B:如果我们给出了构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,系统将不再提供默认构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>
        如果这个时候,我们要使用无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,就必须自己给出。
        推荐:永远手动自己给出无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>。
(</span>4<span style="color: #000000;"&gt;)给成员变量赋值的方式
    A:setXxx()
    B:带参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>
(</span>5<span style="color: #000000;"&gt;)标准案例
    </span><span style="color: #0000ff;"&gt;class</span><span style="color: #000000;"&gt; Student {
        </span><span style="color: #0000ff;"&gt;private</span><span style="color: #000000;"&gt; String name;
        </span><span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age;

        </span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; Student(){}

        </span><span style="color: #0000ff;"&gt;public</span> Student(String name,<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
            </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
            </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
        }

        </span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; String getName() {
            </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; name;
        }

        </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; setName(String name) {
            </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
        }

        </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; getAge() {
            </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; age;
        }

        </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> setAge(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
            </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
        }
    }

    测试:
    </span><span style="color: #0000ff;"&gt;class</span><span style="color: #000000;"&gt; StudentDemo {
        </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; main(String[] args) {
            </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;方式1</span>
            Student s1 = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Student();
            s1.setName(</span>"林青霞"<span style="color: #000000;"&gt;);
            s1.setAge(</span>27<span style="color: #000000;"&gt;);
            System.out.println(s1.getName()</span>+"---"+<span style="color: #000000;"&gt;s1.getAge());

            </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;方式2</span>
            Student s2 = <span style="color: #0000ff;"&gt;new</span> Student("刘意",30<span style="color: #000000;"&gt;);
            System.out.println(s2.getName()</span>+"---"+<span style="color: #000000;"&gt;s2.getAge());
        }
    }</span></pre>

 

 构造方法

方法: 给对象的数据进行初始化
格式:
    A:<span style="color: #ff0000;"&gt;<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>名与类名相同</span>
    B:没有返回值类型,连void都没有
    C:没有具体的返回值

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"><span style="color: #ff0000;"> Student {
<span style="color: #0000ff;">private String name; <span style="color: #008000;">//<span style="color: #008000;">null
<span style="color: #0000ff;">private <span style="color: #0000ff;">int age; <span style="color: #008000;">//<span style="color: #008000;">0

  <span style="color: #ff0000;">//没有返回值类型,连void都没有
<span style="color: #0000ff;">public<span style="color: #000000;"> Student() {
System.out.println("这是构造方法"<span style="color: #000000;">);
}
}

<span style="color: #0000ff;">class<span style="color: #000000;"> ConstructDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建对象
Student s = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();
System.out.println(s); <span style="color: #008000;">//<span style="color: #008000;">Student@e5bbd6
<span style="color: #000000;"> }
}

构造方法的重载和注意事项

方法,但是,我们确没有定义构造方法,用的是哪里来的呢?
构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>的注意事项:
    A:如果我们没有给出构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,系统将<a href="https://www.jb51.cc/tag/zidong/" target="_blank" class="keywords">自动</a>提供一个无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>。
    B:如果我们给出了构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,系统将不再提供默认的无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>。
        注意:这个时候,如果我们还想使用无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,就必须自己给出。<span style="color: #ff0000;"&gt;建议永远自己给出无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>

<span style="color: #ff0000;"&gt;给成员变量赋值有两种方式:
    A:setXxx()
    B:构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>

<span style="color: #008000;">*/

<span style="color: #0000ff;">class<span style="color: #000000;"> Student {
<span style="color: #0000ff;">private<span style="color: #000000;"> String name;
<span style="color: #0000ff;">private <span style="color: #0000ff;">int<span style="color: #000000;"> age;

</span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; Student() {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;System.out.println("我给了,你还给不");</span>
    System.out.println("这是无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>"<span style="color: #000000;"&gt;);
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>的重载格式</span>
<span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; Student(String name) {
    System.out.println(</span>"这是带一个String类型的构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
}

</span><span style="color: #0000ff;"&gt;public</span> Student(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
    System.out.println(</span>"这是带一个int类型的构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
}

</span><span style="color: #0000ff;"&gt;public</span> Student(String name,<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
    System.out.println(</span>"这是一个带多个参数的构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
    </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() {
    System.out.println(name</span>+"---"+<span style="color: #000000;"&gt;age);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> ConstructDemo2 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建对象
Student s = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();
s.show();
System.out.println("-------------"<span style="color: #000000;">);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建对象2</span>
    Student s2 = <span style="color: #0000ff;"&gt;new</span> Student("林青霞"<span style="color: #000000;"&gt;);
    s2.show();
    System.out.println(</span>"-------------"<span style="color: #000000;"&gt;);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建对象3</span>
    Student s3 = <span style="color: #0000ff;"&gt;new</span> Student(27<span style="color: #000000;"&gt;);
    s3.show();
    System.out.println(</span>"-------------"<span style="color: #000000;"&gt;);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建对象4</span>
    <span style="color: #ff0000;"&gt;Student s4 = new Student("林青霞",27</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt;);
    s4.show();</span>
}

}

8、成员方法

方法 今天我们又加入了一个新的成员:构造方法。 以后再提类的组成: 方法 3、成员方法 根据返回值: void类型 非void类型 形式参数: 空参方法 非空参方法 "helloworld"</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() { System.out.println(</span>"show"<span style="color: #000000;"&gt;); } </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; method(String name) { System.out.println(name); } </span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; String function(String s1,String s2) { </span><span style="color: #0000ff;"&gt;return</span> s1+<span style="color: #000000;"&gt;s2; }

}

<span style="color: #0000ff;">class<span style="color: #000000;"> StudentDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建对象
Student s = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>无参无返回值<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>

<span style="color: #000000;"> s.show();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>无参有返回值<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
    String result =<span style="color: #000000;"&gt; s.getString();
    System.out.println(result);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>带参无返回值的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
    s.method("林青霞"<span style="color: #000000;"&gt;);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>带参带返回值的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
    String result2 = s.function("hello","world"<span style="color: #000000;"&gt;);
    System.out.println(result2);
}

}

9、一个标准学生类的代码及测试

代码的最终版。
学生类:
    成员变量:
        name,age
    构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>:
        无参,带两个参
    成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>:
        getXxx()/setXxx()
        show():<a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>该类的所有成员变量值

给成员变量赋值:
    A:setXxx()<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>
    B:构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>

<a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>成员变量值的方式:
    A:通过getXxx()分别<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>然后拼接
    B:通过<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>show()<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>搞定

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> Student {
<span style="color: #008000;">//<span style="color: #008000;">姓名
<span style="color: #0000ff;">private<span style="color: #000000;"> String name;
<span style="color: #008000;">//<span style="color: #008000;">年龄
<span style="color: #0000ff;">private <span style="color: #0000ff;">int<span style="color: #000000;"> age;

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; Student() {
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;"&gt;public</span> Student(String name,<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
    </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
    </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
}
</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;带返回值的成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; String getName() {
    </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; name;
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;不带返回值的成员</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; setName(String name) {
    </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; getAge() {
    </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; age;
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;带参数的成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> setAge(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
    </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>所有的成员变量值</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() {
    System.out.println(name</span>+"---"+<span style="color: #000000;"&gt;age);
}

}

<span style="color: #008000;">//<span style="color: #008000;">测试类
<span style="color: #0000ff;">class<span style="color: #000000;"> StudentTest {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">方式1给成员变量赋值
<span style="color: #008000;">//<span style="color: #008000;">无参构造+setXxx()
Student s1 = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();
s1.setName("林青霞"<span style="color: #000000;">);
s1.setAge(27<span style="color: #000000;">);
<span style="color: #008000;">//<span style="color: #008000;">输出
System.out.println(s1.getName()+"---"+<span style="color: #000000;">s1.getAge());
s1.show();
System.out.println("----------------------------"<span style="color: #000000;">);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;方式2给成员变量赋值</span>
    Student s2 = <span style="color: #0000ff;"&gt;new</span> Student("刘意",30<span style="color: #000000;"&gt;);
    System.out.println(s2.getName()</span>+"---"+<span style="color: #000000;"&gt;s2.getAge());
    s2.show();
}

}

10、代码:Student s = new Student();做了哪些事情?

创建对象做了哪些事情?

(1文件加载到内存 (234)给学生的成员变量进行默认初始化。,05)给学生的成员变量进行显示初始化。林青霞,276)通过构造方法给成员变量进行初始化。刘意,307)对象构造完毕,把地址赋值给s变量

图解:

 

 

11、变量什么时候定义为成员变量:
如果这个变量是用来描述这个类的信息的,那么,该变量就应该定义为成员变量。

变量到底定义在哪里好呢?
变量的范围是越小越好。因为能及时的被回收。

 

Highlighter">
<span style="color: #ff0000;">//方式2  --推荐
/
class Demo {
public int sum(int a,int b) {
return a + b;
}
}
/

//方式2可以满足我们的要求,但是呢我们学习过来面向对象的思想。
//我就再想,a,b可不可以定义为成员变量呢?
//如果可以,我们再改进一版
class Demo {
int a;
int b;

public int sum() {
    return a + b;
}

}
//虽然这种方式可以,并且好像是符合了面向对象的思想。
//但是不好。
//因为我们曾经说过:类是一组相关的属性和行为的集合。
//并且类是通过事物转换过来的
//而类中的成员变量就是事物的属性
//属性是用来描述事物的
//同理:成员变量其实是用来描述类的。

  

 长宽是描述长方形这个类的信息,应该定义为成员变量:

方法, 然后定义一个测试了Test2,进行测试。
长方形的类:
    <span style="color: #ff0000;"&gt;成员变量:
        长,宽</span>
    成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>:
        求周长:(长+宽)*2;
        求面积:长*宽

注意:
    <span style="color: #ff0000;"&gt;import必须出现在所有的class前面。

<span style="color: #008000;">*/

<span style="color: #ff0000;">import java.util.Scanner;

<span style="color: #0000ff;">class<span style="color: #000000;"> ChangFangXing {
<span style="color: #ff0000;">//长方形的长
private int length;
//长方形的宽
private int width;

</span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; ChangFangXing(){}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;仅仅提供setXxx()即可</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> setLength(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; length) {
    </span><span style="color: #0000ff;"&gt;this</span>.length =<span style="color: #000000;"&gt; length;
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> setWidth(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; width) {
    </span><span style="color: #0000ff;"&gt;this</span>.width =<span style="color: #000000;"&gt; width;
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;求周长</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; getZhouChang() {
    </span><span style="color: #0000ff;"&gt;return</span> (length + width) * 2<span style="color: #000000;"&gt;;
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;求面积</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; getArea() {
    </span><span style="color: #0000ff;"&gt;return</span> length *<span style="color: #000000;"&gt; width;
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> Test2 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建键盘录入对象
Scanner sc = <span style="color: #0000ff;">new<span style="color: #000000;"> Scanner(System.in);

    System.out.println(</span>"请输入长方形的长:"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;int</span> length =<span style="color: #000000;"&gt; sc.nextInt();
    System.out.println(</span>"请输入长方形的宽:"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;int</span> width =<span style="color: #000000;"&gt; sc.nextInt();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建对象</span>
    ChangFangXing cfx = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; ChangFangXing();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;先给成员变量赋值</span>

<span style="color: #000000;"> cfx.setLength(length);
cfx.setWidth(width);

    System.out.println(</span>"周长是:"+<span style="color: #000000;"&gt;cfx.getZhouChang());
    System.out.println(</span>"面积是:"+<span style="color: #000000;"&gt;cfx.getArea());
}

}

12、static关键字

101方法。 (2调用 既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。 (3内容在方法区的静态区 (4方法中没有this对象 B:静态只能访问静态(代码测试过) (5方法区的静态区 成员变量:堆内存 C:生命周期不同 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失 成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失 D:调用不同 静态变量:可以通过对象名调用,也可以通过类名调用 成员变量:只能通过对象名调用 (6方法是静态的 调用 名称。 String[] args:可以接收数据,提供程序的灵活性 格式:java MainDemo hello world java java MainDemo 10 20 30

static的引入

姓名和年龄都是变化的,这个我能接收,因为每个人的姓名和年龄是不同的。 但是,我们现在选取的几个人都是中国人,他们的国籍是一样的。 一样的国籍,我每次创建对象,在堆内存都要开辟这样的空间, 我就觉得有点浪费了。怎么办呢? <span style="color: #ff0000;"&gt;针对多个对象有共同的这样的成员变量值的时候, Java就提高了一个关键字来修饰:static。

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> Person {
<span style="color: #008000;">//<span style="color: #008000;">姓名
<span style="color: #000000;"> String name;
<span style="color: #008000;">//<span style="color: #008000;">年龄
<span style="color: #0000ff;">int<span style="color: #000000;"> age;
<span style="color: #ff0000;">//国籍
<span style="color: #008000;">//<span style="color: #008000;">String country;
<span style="color: #ff0000;"> static<span style="color: #000000;"> String country;

</span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; Person(){}

</span><span style="color: #0000ff;"&gt;public</span> Person(String name,<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
    </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
    </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
}

</span><span style="color: #0000ff;"&gt;public</span> Person(String name,<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age,String country) {
    </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
    </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
    </span><span style="color: #0000ff;"&gt;this</span>.country =<span style="color: #000000;"&gt; country;
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() {
    System.out.println(</span>"姓名:"+name+",年龄:"+age+",国籍:"+<span style="color: #000000;"&gt;country);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> PersonDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建对象1
Person p1 = <span style="color: #0000ff;">new Person("邓丽君",16,"中国"<span style="color: #000000;">);
p1.show();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建对象2
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;Person p2 = new Person("杨幂",22,"中国");
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;p2.show();</span>
    Person p2 = <span style="color: #0000ff;"&gt;new</span> Person("杨幂",22<span style="color: #000000;"&gt;);
    p2.show();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建对象3
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;Person p3 = new Person("凤姐",20,"中国");
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;p3.show();</span>
    Person p3 = <span style="color: #0000ff;"&gt;new</span> Person("凤姐",20<span style="color: #000000;"&gt;);
    p3.show();

    p3.country </span>= "美国"<span style="color: #000000;"&gt;;<span style="color: #ff0000;"&gt;//其他对象里的国籍也会变成“美国”</span>
    p3.show();

    p1.show();
    p2.show();
}

}

static特点

方法) A:随着类的加载而加载 回想main方法。 B:优先于对象存在 C:被类的所有对象共享 举例:咱们班级的学生应该共用同一个班级编号。 其实这个特点也是在告诉我们什么时候使用静态? 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。 举例: 饮水机(用静态修饰) 水杯(不能用静态修饰) D:可以通过类名调用 其实它本身也可以通过对象名调用调用。
        <span style="color: #ff0000;"&gt;因为:静态修饰的<a href="https://www.jb51.cc/tag/neirong/" target="_blank" class="keywords">内容</a>一般我们称其为<strong>:与类相关的,类成员

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> Student {
<span style="color: #008000;">//<span style="color: #008000;">非静态变量
<span style="color: #0000ff;">int num = 10<span style="color: #000000;">;

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;静态变量</span>
<span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;int</span> num2 = 20<span style="color: #000000;"&gt;;

}

<span style="color: #0000ff;">class<span style="color: #000000;"> StudentDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
Student s = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();
System.out.println(s.num);

    <span style="color: #ff0000;"&gt;System.out.println(Student.num2);//推荐类名<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a></span>
    System.out.println(s.num2);
}

}

static内存图解:

 

 

 static注意事项;

方法中是没有this关键字的 如何理解呢? B:静态方法只能访问静态的成员变量和静态的成员方法 静态方法: 成员变量:只能访问静态变量 成员方法:只能访问静态成员方法 非静态方法: 成员变量:可以是静态的,也可以是非静态的 成员方法:可是是静态的成员方法,也可以是非静态的成员方法 num = 10 num2 = 20</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() { System.out.println(num); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;隐含的告诉你访问的是成员变量</span> System.out.println(<span style="color: #0000ff;"&gt;this</span>.num); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;明确的告诉你访问的是成员变量</span>

<span style="color: #000000;"> System.out.println(num2);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;function();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;function2();</span>

<span style="color: #000000;"> }

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; method() {

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;System.out.println(num);</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;无法从静态上下文中引用非静态 变量 num</span>

<span style="color: #000000;"> System.out.println(num2);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;无法从静态上下文中引用非静态 <a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a> function()
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;function();</span>

<span style="color: #000000;"> function2();
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; function() {

}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; function2() {

}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> TeacherDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建对象
Teacher t = <span style="color: #0000ff;">new<span style="color: #000000;"> Teacher();
t.show();
System.out.println("------------"<span style="color: #000000;">);
t.method();
}
}

main方法的格式

方法的格式讲解: public static void main(String[] args) {...}
    public:公共的,访问权限是最大的。由于main<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>是被jvm<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>,所以权限要够大。
    static:静态的,不需要创建对象,通过类名就可以。方便jvm的<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>。
    void:因为我们曾经说过,<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>的返回值是返回给<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>者,而main<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>是被jvm<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>。你返回<a href="https://www.jb51.cc/tag/neirong/" target="_blank" class="keywords">内容</a>给jvm没有意义。
    main:是一个常见的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>入口。我见过的语言都是以main作为入口。
    String[] args:这是一个字符串数组。值去哪里了?
        这个东西到底有什么用啊?怎么给值啊?
            这个东西早期是为了接收<a href="https://www.jb51.cc/tag/jianpan/" target="_blank" class="keywords">键盘</a>录入的数据的。
            格式是:
                java MainDemo hello world java

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> MainDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">System.out.println(args); <span style="color: #008000;">//<span style="color: #008000;">[Ljava.lang.String;@175078b
<span style="color: #008000;">//<span style="color: #008000;">System.out.println(args.length); <span style="color: #008000;">//<span style="color: #008000;">0
<span style="color: #008000;">//<span style="color: #008000;">System.out.println(args[0]); <span style="color: #008000;">//<span style="color: #008000;">ArrayIndexOutOfBoundsException

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;接收数据后</span>

<span style="color: #000000;"> System.out.println(args);
System.out.println(args.length);
<span style="color: #008000;">//<span style="color: #008000;">System.out.println(args[0]);
<span style="color: #0000ff;">for(<span style="color: #0000ff;">int x=0; x<args.length; x++<span style="color: #000000;">) {
System.out.println(args[x]);
}
}
}

运行结果:

 

原文链接:https://www.f2er.com/java/403351.html

猜你在找的Java相关文章