加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

07-01 Java 封装

发布时间:2020-12-14 06:09:55 所属栏目:Java 来源:网络整理
导读:1:成员变量和局部变量的区别 注意事项: 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。 span style="color: #008000;"*/ span style="color: #0000ff;"class span style="color: #000000;" Varialbe { span style="color: #0
1:成员变量和局部变量的区别
    注意事项:
        局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

<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;形式参数是引用类型的调用
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;需求:我要调用StudentDemo类中的method()方法</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:调用方法,仅仅只调用一次的时候。 <span style="color: #ff0000;"&gt;注意:调用多次的时候,不适合。因为会重新生成对象</span> 那么,这种匿名调用有什么好处吗? <span style="color: #ff0000;"&gt; 有,匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。</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;匿名对象调用方法</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
1234<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的引出

我们在使用这个案例的过程中,发现了一个问题: 通过对象去给成员变量赋值,可以赋值一些非法的数据。 这是不合理的。 应该是这个样子的:在赋值之前,先对数据进行判断。 判断到底在哪里做比较合适呢? StudentDemo类是一个测试类,测试类一般只创建对象,调用方法。 所以,这个判断应该定义在Student类中。 而我们在成员变量的位置可不可以进行数据判断呢? 是不可以的,因为做数据校验,必须要依靠一些逻辑语句。 逻辑语句是应该定义在方法中的,所以,我们最终决定在Student类中提供一个方法 来对数据进行校验。 按照我们前面的分析,我们给出了一个方法进行校验。 但是呢,它偏偏不调用方法来赋值,还是直接赋值了, 这样我们的方法就没有起到作用。 我就应该要求你必须使用我的方法,而不能直接调用成员变量赋值。 <span style="color: #ff0000;"&gt;怎么去强制要求不能直接使用成员变量呢? 针对这种情况,Java就提供了一个关键字 private private:私有的。可以修饰成员变量和成员方法。 注意:被private修饰的成员只能在本类中访问。 其实我讲到现在讲解的是一个封装的思想。 封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

<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;写一个方法对数据进行校验</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()方法,显示所有成员变量值</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;//通过方法给值</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;姓名获取值</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;年龄获取值</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;错误:被私有修饰了,外界不能直接访问了
    </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;通过方法给赋值</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关键字和内存图解
12

this关键字使用

this:哪个对象调用那个方法,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:构造方法

712 思考题:构造方法中可不可以有return语句呢</span>?<span style="color: #000000;"&gt; 可以。而是我们写成这个样子就OK了:</span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt;; 其实,在任何的void类型的方法的最后你都可以写上:</span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt;; (</span>3<span style="color: #000000;"&gt;)构造方法的注意事项 A:如果我们没写构造方法,系统将提供一个默认的无参构造方法 B:如果我们给出了构造方法,系统将不再提供默认构造方法 如果这个时候,我们要使用无参构造方法,就必须自己给出。 推荐:永远手动自己给出无参构造方法。 (</span>4<span style="color: #000000;"&gt;)给成员变量赋值的方式 A:setXxx() B:带参构造方法 (</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;方法名与类名相同</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:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。 B:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。<span style="color: #ff0000;"&gt;建议永远自己给出无参构造方法</span> <span style="color: #ff0000;"&gt;给成员变量赋值有两种方式: A:setXxx() B:构造方法

<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("这是无参构造方法"<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: #000000;"&gt; Student(String name) {
    System.out.println(</span>"这是带一个String类型的构造方法"<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类型的构造方法"<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>"这是一个带多个参数的构造方法"<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、成员方法

根据返回值: 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;调用无参无返回值方法</span>

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

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;调用无参有返回值方法</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;调用带参无返回值的方法</span>
    s.method("林青霞"<span style="color: #000000;"&gt;);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;调用带参带返回值的方法</span>
    String result2 = s.function("hello","world"<span style="color: #000000;"&gt;);
    System.out.println(result2);
}

}

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

学生类: 成员变量: name,age 构造方法: 无参,带两个参 成员方法: getXxx()/setXxx() show():输出该类的所有成员变量值 给成员变量赋值: A:setXxx()方法 B:构造方法 输出成员变量值的方式: A:通过getXxx()分别获取然后拼接 B:通过调用show()方法搞定

<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;构造方法</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;构造方法</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;带返回值的成员方法</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;带参数的成员方法</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;输出所有的成员变量值</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();做了哪些事情?

创建对象做了哪些事情?

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

图解:

?

?

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

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

?

<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;
}

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

  

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

长方形的类: <span style="color: #ff0000;"&gt;成员变量: 长,宽</span> 成员方法: 求周长:(长+宽)*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关键字

1012345610 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特点

        <span style="color: #ff0000;"&gt;因为:静态修饰的内容一般我们称其为<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);//推荐类名调用</span>
    System.out.println(s.num2);
}

}

static内存图解:

?

?

?static注意事项;

如何理解呢? 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;无法从静态上下文中引用非静态 方法 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:公共的,访问权限是最大的。由于main方法是被jvm调用,所以权限要够大。 static:静态的,不需要创建对象,通过类名就可以。方便jvm的调用。 void:因为我们曾经说过,方法的返回值是返回给调用者,而main方法是被jvm调用。你返回内容给jvm没有意义。 main:是一个常见的方法入口。我见过的语言都是以main作为入口。 String[] args:这是一个字符串数组。值去哪里了? 这个东西到底有什么用啊?怎么给值啊? 这个东西早期是为了接收键盘录入的数据的。 格式是: 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]);
}
}
}

运行结果:

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读