1:成员变量和局部变量的区别
注意事项:
局部变量<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;">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:类作为形式参数的问题
如果你看到一个方法需要的参数是一个类名,就应该知道这里实际需要的是一个具体的对象。
<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;">形式参数是引用类型的<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>
</span><span style="color: #008000;">//</span><span style="color: #008000;">需求:我要<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;">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:<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;">注意:<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;"> 有,匿名对象<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;">匿名对象可以作为实际参数传递
<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;">匿名对象<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;">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
(1<span style="color: #000000;">)私有的意义,可以修饰成员变量和成员方法
(2<span style="color: #000000;">)特点:
被private修饰的后的成员只能在本类中被访问
(3<span style="color: #000000;">)private的应用:
以后再写一个类的时候:
把所有的成员变量给private了
提供对应的getXxx()/setXxx()方法
private的引出
我们在使用这个案例的过程中,发现了一个问题:
通过对象去给成员变量赋值,可以赋值一些非法的数据。
这是不合理的。
应该是这个样子的:在赋值之前,先对数据进行判断。
判断到底在哪里做比较合适呢?
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;">怎么去强制要求不能直接使用成员变量呢?
针对这种情况,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;">//</span><span style="color: #008000;">写一个<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>对数据进行校验</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()<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;">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;">//通过<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>给值</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;">姓名<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>值</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;">年龄<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>值</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;"><a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>:被私有修饰了,外界不能直接访问了
</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;">通过<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>给赋值</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关键字和内存图解
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;">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:构造方法
思考题:构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>中可不可以有return语句呢</span>?<span style="color: #000000;">
可以。而是我们写成这个样子就OK了:</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;
其实,在任何的void类型的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>的最后你都可以写上:</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;
(</span>3<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/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;">)给成员变量赋值的方式
A:setXxx()
B:带参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>
(</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;"><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;">建议永远自己给出无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #ff0000;">给成员变量赋值有两种方式:
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;">public</span><span style="color: #000000;"> Student() {
</span><span style="color: #008000;">//</span><span style="color: #008000;">System.out.println("我给了,你还给不");</span>
System.out.println("这是无参构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>"<span style="color: #000000;">);
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>的重载格式</span>
<span style="color: #0000ff;">public</span><span style="color: #000000;"> 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;">);
</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类型的构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>"<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>"这是一个带多个参数的构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>"<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、成员方法
</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;"><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;">//</span><span style="color: #008000;"><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;"> s.getString();
System.out.println(result);
</span><span style="color: #008000;">//</span><span style="color: #008000;"><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;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;"><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;">);
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;">//</span><span style="color: #008000;">构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;">public</span><span style="color: #000000;"> Student() {
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></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;">带返回值的成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></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;">带参数的成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></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;"><a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>所有的成员变量值</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();做了哪些事情?
创建对象做了哪些事情?
图解:
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>
成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>:
求周长:(长+宽)*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关键字
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;">因为:静态修饰的<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;">//</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);//推荐类名<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a></span>
System.out.println(s.num2);
}
}
static内存图解:
static注意事项;
</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;">无法从静态上下文中引用非静态 <a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a> 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<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;">//</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]);
}
}
}
运行结果:
原文链接:https://www.f2er.com/java/403351.html