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;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> show() {
</span><span style="color: #008000;">//</span><span style="color: #008000;">int num2 = 20; </span><span style="color: #008000;">//</span><span style="color: #008000;">局部变量
</span><span style="color: #008000;">//</span><span style="color: #008000;">可能尚未初始化变量num2</span>
<span style="color: #0000ff;">int</span> num2; <span style="color: #008000;">//</span><span style="color: #008000;">没有默认值
</span><span style="color: #008000;">//</span><span style="color: #008000;"> int num2 = 20;</span>
System.out.println(num2);<span style="color: #ff0000;">//这里报错,num2没有默认值</span>
<span style="color: #0000ff;">int</span> num = 100<span style="color: #000000;">;
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;">//</span><span style="color: #008000;">访问成员变量</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;">//</span><span style="color: #008000;">形式参数是引用类型的调用
</span><span style="color: #008000;">//</span><span style="color: #008000;">需求:我要调用StudentDemo类中的method()方法</span>
StudentDemo sd = <span style="color: #0000ff;">new</span><span style="color: #000000;"> StudentDemo();
</span><span style="color: #ff0000;">//创建学生对象</span>
Student s = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Student();
sd.method(s); </span><span style="color: #ff0000;">//把s的地址给到了这里</span>
<span style="color: #000000;"> }
}
3:匿名对象
匿名对象的应用场景:
A:调用方法,仅仅只调用一次的时候。
<span style="color: #ff0000;">注意:调用多次的时候,不适合。因为会重新生成对象</span>
那么,这种匿名调用有什么好处吗?
<span style="color: #ff0000;"> 有,匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。</span>
B:<span style="color: #ff0000;">匿名对象可以作为实际参数传递
<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;">//</span><span style="color: #008000;">匿名对象
</span><span style="color: #008000;">//</span><span style="color: #008000;">new Student();
</span><span style="color: #008000;">//</span><span style="color: #008000;">匿名对象调用方法</span>
<span style="color: #0000ff;">new</span><span style="color: #000000;"> Student().show();
</span><span style="color: #0000ff;">new</span> Student().show(); <span style="color: #008000;">//</span><span style="color: #008000;">这里其实是重新创建了一个新的对象</span>
System.out.println("--------------"<span style="color: #000000;">);
</span><span style="color: #ff0000;">//匿名对象作为实际参数传递</span>
StudentDemo sd = <span style="color: #0000ff;">new</span><span style="color: #000000;"> StudentDemo();
</span><span style="color: #008000;">//</span><span style="color: #008000;">Student ss = new Student();
</span><span style="color: #008000;">//</span><span style="color: #008000;">sd.method(ss); </span><span style="color: #008000;">//</span><span style="color: #008000;">这里的s是一个实际参数
</span><span style="color: #ff0000;">//匿名对象
sd.method(new Student());
</span><span style="color: #008000;">//</span><span style="color: #008000;">在来一个</span>
<span style="color: #ff0000;">new StudentDemo().method(new</span><span style="color: #000000;"><span style="color: #ff0000;"> 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;">怎么去强制要求不能直接使用成员变量呢?
针对这种情况,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;">//</span><span style="color: #008000;">写一个方法对数据进行校验</span>
<span style="color: #008000;">/*</span><span style="color: #008000;">
返回值类型:void
参数列表:int a
</span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setAge(<span style="color: #0000ff;">int</span><span style="color: #000000;"> a) {
</span><span style="color: #0000ff;">if</span>(a < 0 || age > 120<span style="color: #000000;">) {
System.out.println(</span>"你给的年龄有问题"<span style="color: #000000;">);
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
age </span>=<span style="color: #000000;"> a;
}
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">show()方法,显示所有成员变量值</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> show() {
System.out.println(</span>"姓名:"+<span style="color: #000000;">name);
System.out.println(</span>"年龄:"+<span style="color: #000000;">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;">//</span><span style="color: #008000;">给成员变量赋值</span>
s.name = "林青霞"<span style="color: #000000;">;
</span><span style="color: #008000;">//</span><span style="color: #008000;">s.age = 27;</span>
s.setAge(27<span style="color: #000000;">);
s.show();
System.out.println(</span>"--------------"<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">给age赋值
</span><span style="color: #008000;">//</span><span style="color: #008000;">s.age = -27; </span><span style="color: #008000;">//</span><span style="color: #008000;">这个数据是不合理的
</span><span style="color: #ff0000;">//通过方法给值</span>
s.setAge(-27);<span style="color: #ff0000;">//你给的年龄有问题</span>
<span style="color: #000000;"> s.show();
System.out.println("--------------"<span style="color: #000000;">);
}
}
封装和private的使用
</span><span style="color: #008000;">//</span><span style="color: #008000;">姓名获取值</span>
<span style="color: #0000ff;">public</span><span style="color: #000000;"> String getName() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> name;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">姓名设置值</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setName(String n) {
name </span>=<span style="color: #000000;"> n;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">年龄获取值</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> getAge() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> age;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">年龄赋值</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setAge(<span style="color: #0000ff;">int</span><span style="color: #000000;"> a) {
age </span>=<span style="color: #000000;"> 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;">//</span><span style="color: #008000;">使用成员变量
</span><span style="color: #008000;">//</span><span style="color: #008000;">错误:被私有修饰了,外界不能直接访问了
</span><span style="color: #008000;">//</span><span style="color: #008000;">System.out.println(s.name+"---"+s.age);</span>
System.out.println(s.getName()+"---"+<span style="color: #000000;">s.getAge());
</span><span style="color: #008000;">//</span><span style="color: #008000;">给成员变量赋值
</span><span style="color: #008000;">//</span><span style="color: #008000;">s.name = "林青霞";
</span><span style="color: #008000;">//</span><span style="color: #008000;">s.age = 27;
</span><span style="color: #008000;">//</span><span style="color: #008000;">通过方法给赋值</span>
<span style="color: #ff0000;">s.setName("林青霞");
s.setAge(27</span><span style="color: #000000;"><span style="color: #ff0000;">);</span>
System.out.println(<span style="color: #ff0000;">s.getName()</span></span><span style="color: #ff0000;">+"---"+</span><span style="color: #000000;"><span style="color: #ff0000;">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;">public</span><span style="color: #000000;"><span style="color: #ff0000;"> String</span> getName() {
</span><span style="color: #0000ff;">return</span> name; <span style="color: #008000;">//</span><span style="color: #008000;">这里其实是隐含了this,this.name</span>
<span style="color: #000000;"> }
</span><span style="color: #0000ff;">public</span><span style="color: #ff0000;"> void</span><span style="color: #000000;"> setName(String name) {
</span><span style="color: #ff0000;">this.name =</span><span style="color: #000000;"><span style="color: #ff0000;"> name;</span>
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> getAge() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> age;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setAge(<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
</span><span style="color: #ff0000;">this.age =</span><span style="color: #000000;"><span style="color: #ff0000;"> 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;">//</span><span style="color: #008000;">创建第二个对象</span>
Student s2 = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Student();
s2.setName(</span>"刘意"<span style="color: #000000;">);
s2.setAge(</span>30<span style="color: #000000;">);
System.out.println(s2.getName()</span>+"---"+<span style="color: #000000;">s2.getAge());
}
}
this 内存图解:

?
?7:构造方法
712 思考题:构造方法中可不可以有return语句呢</span>?<span style="color: #000000;">
可以。而是我们写成这个样子就OK了:</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;
其实,在任何的void类型的方法的最后你都可以写上:</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;
(</span>3<span style="color: #000000;">)构造方法的注意事项
A:如果我们没写构造方法,系统将提供一个默认的无参构造方法
B:如果我们给出了构造方法,系统将不再提供默认构造方法
如果这个时候,我们要使用无参构造方法,就必须自己给出。
推荐:永远手动自己给出无参构造方法。
(</span>4<span style="color: #000000;">)给成员变量赋值的方式
A:setXxx()
B:带参构造方法
(</span>5<span style="color: #000000;">)标准案例
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Student {
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String name;
</span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> age;
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Student(){}
</span><span style="color: #0000ff;">public</span> Student(String name,<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
}
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getName() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> name;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setName(String name) {
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> getAge() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> age;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setAge(<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
}
}
测试:
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> StudentDemo {
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) {
</span><span style="color: #008000;">//</span><span style="color: #008000;">方式1</span>
Student s1 = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Student();
s1.setName(</span>"林青霞"<span style="color: #000000;">);
s1.setAge(</span>27<span style="color: #000000;">);
System.out.println(s1.getName()</span>+"---"+<span style="color: #000000;">s1.getAge());
</span><span style="color: #008000;">//</span><span style="color: #008000;">方式2</span>
Student s2 = <span style="color: #0000ff;">new</span> Student("刘意",30<span style="color: #000000;">);
System.out.println(s2.getName()</span>+"---"+<span style="color: #000000;">s2.getAge());
}
}</span></pre>
?
?构造方法
格式:
A:<span style="color: #ff0000;">方法名与类名相同</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;">建议永远自己给出无参构造方法</span>
<span style="color: #ff0000;">给成员变量赋值有两种方式:
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;">public</span><span style="color: #000000;"> Student() {
</span><span style="color: #008000;">//</span><span style="color: #008000;">System.out.println("我给了,你还给不");</span>
System.out.println("这是无参构造方法"<span style="color: #000000;">);
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">构造方法的重载格式</span>
<span style="color: #0000ff;">public</span><span style="color: #000000;"> Student(String name) {
System.out.println(</span>"这是带一个String类型的构造方法"<span style="color: #000000;">);
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
}
</span><span style="color: #0000ff;">public</span> Student(<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
System.out.println(</span>"这是带一个int类型的构造方法"<span style="color: #000000;">);
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
}
</span><span style="color: #0000ff;">public</span> Student(String name,<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
System.out.println(</span>"这是一个带多个参数的构造方法"<span style="color: #000000;">);
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> show() {
System.out.println(name</span>+"---"+<span style="color: #000000;">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;">//</span><span style="color: #008000;">创建对象2</span>
Student s2 = <span style="color: #0000ff;">new</span> Student("林青霞"<span style="color: #000000;">);
s2.show();
System.out.println(</span>"-------------"<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">创建对象3</span>
Student s3 = <span style="color: #0000ff;">new</span> Student(27<span style="color: #000000;">);
s3.show();
System.out.println(</span>"-------------"<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">创建对象4</span>
<span style="color: #ff0000;">Student s4 = new Student("林青霞",27</span><span style="color: #000000;"><span style="color: #ff0000;">);
s4.show();</span>
}
}
8、成员方法
根据返回值:
void类型
非void类型
形式参数:
空参方法
非空参方法
"helloworld"</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> show() {
System.out.println(</span>"show"<span style="color: #000000;">);
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> method(String name) {
System.out.println(name);
}
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String function(String s1,String s2) {
</span><span style="color: #0000ff;">return</span> s1+<span style="color: #000000;">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;">//</span><span style="color: #008000;">调用无参无返回值方法</span>
<span style="color: #000000;"> s.show();
</span><span style="color: #008000;">//</span><span style="color: #008000;">调用无参有返回值方法</span>
String result =<span style="color: #000000;"> s.getString();
System.out.println(result);
</span><span style="color: #008000;">//</span><span style="color: #008000;">调用带参无返回值的方法</span>
s.method("林青霞"<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">调用带参带返回值的方法</span>
String result2 = s.function("hello","world"<span style="color: #000000;">);
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;">//</span><span style="color: #008000;">构造方法</span>
<span style="color: #0000ff;">public</span><span style="color: #000000;"> Student() {
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">构造方法</span>
<span style="color: #0000ff;">public</span> Student(String name,<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">带返回值的成员方法</span>
<span style="color: #0000ff;">public</span><span style="color: #000000;"> String getName() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> name;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">不带返回值的成员</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setName(String name) {
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> getAge() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> age;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">带参数的成员方法</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setAge(<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">输出所有的成员变量值</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> show() {
System.out.println(name</span>+"---"+<span style="color: #000000;">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;">//</span><span style="color: #008000;">方式2给成员变量赋值</span>
Student s2 = <span style="color: #0000ff;">new</span> Student("刘意",30<span style="color: #000000;">);
System.out.println(s2.getName()</span>+"---"+<span style="color: #000000;">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;">成员变量:
长,宽</span>
成员方法:
求周长:(长+宽)*2;
求面积:长*宽
注意:
<span style="color: #ff0000;">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;">public</span><span style="color: #000000;"> ChangFangXing(){}
</span><span style="color: #008000;">//</span><span style="color: #008000;">仅仅提供setXxx()即可</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setLength(<span style="color: #0000ff;">int</span><span style="color: #000000;"> length) {
</span><span style="color: #0000ff;">this</span>.length =<span style="color: #000000;"> length;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> setWidth(<span style="color: #0000ff;">int</span><span style="color: #000000;"> width) {
</span><span style="color: #0000ff;">this</span>.width =<span style="color: #000000;"> width;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">求周长</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> getZhouChang() {
</span><span style="color: #0000ff;">return</span> (length + width) * 2<span style="color: #000000;">;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">求面积</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> getArea() {
</span><span style="color: #0000ff;">return</span> length *<span style="color: #000000;"> 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;">);
</span><span style="color: #0000ff;">int</span> length =<span style="color: #000000;"> sc.nextInt();
System.out.println(</span>"请输入长方形的宽:"<span style="color: #000000;">);
</span><span style="color: #0000ff;">int</span> width =<span style="color: #000000;"> sc.nextInt();
</span><span style="color: #008000;">//</span><span style="color: #008000;">创建对象</span>
ChangFangXing cfx = <span style="color: #0000ff;">new</span><span style="color: #000000;"> ChangFangXing();
</span><span style="color: #008000;">//</span><span style="color: #008000;">先给成员变量赋值</span>
<span style="color: #000000;"> cfx.setLength(length);
cfx.setWidth(width);
System.out.println(</span>"周长是:"+<span style="color: #000000;">cfx.getZhouChang());
System.out.println(</span>"面积是:"+<span style="color: #000000;">cfx.getArea());
}
}
12、static关键字
1012345610 20 30
static的引入
姓名和年龄都是变化的,这个我能接收,因为每个人的姓名和年龄是不同的。
但是,我们现在选取的几个人都是中国人,他们的国籍是一样的。
一样的国籍,我每次创建对象,在堆内存都要开辟这样的空间,
我就觉得有点浪费了。怎么办呢?
<span style="color: #ff0000;">针对多个对象有共同的这样的成员变量值的时候,
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;">public</span><span style="color: #000000;"> Person(){}
</span><span style="color: #0000ff;">public</span> Person(String name,<span style="color: #0000ff;">int</span><span style="color: #000000;"> age) {
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
}
</span><span style="color: #0000ff;">public</span> Person(String name,<span style="color: #0000ff;">int</span><span style="color: #000000;"> age,String country) {
</span><span style="color: #0000ff;">this</span>.name =<span style="color: #000000;"> name;
</span><span style="color: #0000ff;">this</span>.age =<span style="color: #000000;"> age;
</span><span style="color: #0000ff;">this</span>.country =<span style="color: #000000;"> country;
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> show() {
System.out.println(</span>"姓名:"+name+",年龄:"+age+",国籍:"+<span style="color: #000000;">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;">//</span><span style="color: #008000;">创建对象2
</span><span style="color: #008000;">//</span><span style="color: #008000;">Person p2 = new Person("杨幂",22,"中国");
</span><span style="color: #008000;">//</span><span style="color: #008000;">p2.show();</span>
Person p2 = <span style="color: #0000ff;">new</span> Person("杨幂",22<span style="color: #000000;">);
p2.show();
</span><span style="color: #008000;">//</span><span style="color: #008000;">创建对象3
</span><span style="color: #008000;">//</span><span style="color: #008000;">Person p3 = new Person("凤姐",20,"中国");
</span><span style="color: #008000;">//</span><span style="color: #008000;">p3.show();</span>
Person p3 = <span style="color: #0000ff;">new</span> Person("凤姐",20<span style="color: #000000;">);
p3.show();
p3.country </span>= "美国"<span style="color: #000000;">;<span style="color: #ff0000;">//其他对象里的国籍也会变成“美国”</span>
p3.show();
p1.show();
p2.show();
}
}
static特点
<span style="color: #ff0000;">因为:静态修饰的内容一般我们称其为<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;">//</span><span style="color: #008000;">静态变量</span>
<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">int</span> num2 = 20<span style="color: #000000;">;
}
<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;">System.out.println(Student.num2);//推荐类名调用</span>
System.out.println(s.num2);
}
}
static内存图解:

?
?
?static注意事项;
如何理解呢?
B:静态方法只能访问静态的成员变量和静态的成员方法
静态方法:
成员变量:只能访问静态变量
成员方法:只能访问静态成员方法
非静态方法:
成员变量:可以是静态的,也可以是非静态的
成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
num = 10 num2 = 20</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> show() {
System.out.println(num); </span><span style="color: #008000;">//</span><span style="color: #008000;">隐含的告诉你访问的是成员变量</span>
System.out.println(<span style="color: #0000ff;">this</span>.num); <span style="color: #008000;">//</span><span style="color: #008000;">明确的告诉你访问的是成员变量</span>
<span style="color: #000000;"> System.out.println(num2);
</span><span style="color: #008000;">//</span><span style="color: #008000;">function();
</span><span style="color: #008000;">//</span><span style="color: #008000;">function2();</span>
<span style="color: #000000;"> }
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> method() {
</span><span style="color: #008000;">//</span><span style="color: #008000;">System.out.println(num);</span><span style="color: #008000;">//</span><span style="color: #008000;">无法从静态上下文中引用非静态 变量 num</span>
<span style="color: #000000;"> System.out.println(num2);
</span><span style="color: #008000;">//</span><span style="color: #008000;">无法从静态上下文中引用非静态 方法 function()
</span><span style="color: #008000;">//</span><span style="color: #008000;">function();</span>
<span style="color: #000000;"> function2();
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> function() {
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> 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;">//</span><span style="color: #008000;">接收数据后</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]);
}
}
}
运行结果:

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