热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

达内课程8-面向对象(二)

构造方法1、新建实例时执行的特殊方法newSoldier();newFlashLight():newCar():newDog();新建实例的同时,调用一个构造方法2、一个

构造方法

1、新建实例时执行的特殊方法

new Soldier();
new FlashLight():
new Car():
new Dog();

新建实例的同时,调用一个构造方法

2、一个类必须有构造方法
3、如果不写构造方法,编辑器编译代码时,会默认添加一个构造方法,如下:

public class A(){
//添加的默认无参空方法,没有返回类型
public A(){
}
}

4、构造方法重载(具有不同参数)
增加程序的灵活性

public class A(){
public A(int i){
...
}
public A(double d){
...
}
public A(int i,double d){
...
}
}

创建实例时,就不能写new A();
因为已经写了构造参数,运行时就不会再添加默认的构造方法

5、构造方法的作用,通常用来给成员变量赋值

举例1,给Dog类添加构造方法

public class Dog {
public String name;//名字
public int hungry;//饥饿度
public int happy;//快乐度

//构造方法
public Dog(){
Log.d("Dog","执行了构造方法");
}

//喂食
public void feed(TextView textView){
if(hungry==0){
textView.setText(name+"吃饱了\n"+textView.getText());
return;
}
hungry-=10;
textView.setText("给"+name+"喂食,hungry:"+hungry+"\n"+textView.getText());
}
......

那么在创建Dog类时,会执行Log输出

Log输出

举例2,给Dog类添加构造方法

  public class Dog {
public String name;//名字
public int hungry;//饥饿度
public int happy;//快乐度

//构造方法
public Dog(String name,int hungry,int happy){
//如果局部变量与成员变量同名,必须用this.xx来引用成员变量,如果不同名,可以直接写
this.name = name;
this.happy = hungry;
this.happy = happy;
}
......

创建Dog对象的时候写法

dog = new Dog("蠢狗",50,50);

举例3,给Dog类添加构造方法

public class Dog {
public String name;//名字
public int hungry;//饥饿度
public int happy;//快乐度

//构造方法
public Dog(){

}
public Dog(String name,int hungry,int happy){
//如果局部变量与成员变量同名,必须用this.xx来引用成员变量
this.name = name;
this.happy = hungry;
this.happy = happy;
}
......

创建Dog对象的时候写法有两种

dog = new Dog("蠢狗",50,50);
dog = new Dog();

练习

Student类

public class Student {
public int id;
public String name;
public String gender;
public int age;

//添加构造方法
public Student(){

}
public Student(int id,String name){
//减少代码重复,调用3个参数方法,没有的参数gender可以传默认值null
/*this.id = id;
this.name = name;*/

this(id,name,null);
}
public Student(int id,String name,String gender){
//减少代码重复,调用3个参数方法,没有的参数age可以传默认值0
/* this.id = id;
this.name = name;
this.gender = gender;*/

this(id,name,gender,0);
}
public Student(int id,String name,String gender,int age){
this.id = id;
this.name = name;
this.gender = gender;
this.age = age;
}

public String toString(){
return "\n姓名:"+name+"\n性别"+gender+"\n年龄"+age+"\nid"+id;
}
}

xml

"http://schemas.android.com/apk/res/android"
android:layout_hljs-string">"match_parent"
android:layout_hljs-string">"match_parent"
android:columnCount="4"
android:orientation="vertical"
android:rowCount="6">


android:id="@+id/button1"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:text="student()"
android:OnClick="doClick"
/>

android:id="@+id/button2"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:text="student(id,name)"
android:OnClick="doClick"/>

android:id="@+id/button3"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:text="student(id,name,gender)"
android:OnClick="doClick"/>

android:id="@+id/button4"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:text="student(id,name,gender,age)"
android:OnClick="doClick"/>

android:id="@+id/textView"
android:layout_hljs-string">"match_parent"
android:layout_hljs-string">"wrap_content"
/>


MainActivity

public class MainActivity extends AppCompatActivity {
Dog dog;

Button create;
Button button1;
Button button2;
Button button3;
TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

create = (Button)findViewById(R.id.button1);
button1 = (Button)findViewById(R.id.button2);
button2 = (Button)findViewById(R.id.button3);
button3 = (Button)findViewById(R.id.button4);
textView = (TextView)findViewById(R.id.textView);
}

public void doClick(View view) {
switch (view.getId()) {
case R.id.button1:
f1();
break;
case R.id.button2:
f2();
break;
case R.id.button3:
f3();
break;
case R.id.button4:
f4();
break;
}
}

private void f1(){
Student s = new Student();
textView.setText(s.toString());
}

private void f2(){
Student s = new Student(9527,"张三");
textView.setText(s.toString());
}
private void f3(){
Student s = new Student(9528,"lili","女");
textView.setText(s.toString());
}
private void f4(){
Student s = new Student(9529,"苏菲","女",22);
textView.setText(s.toString());
}
}

this

1、引用当前对象成员
this保存当前对象的内存地址
用this可以访问当前对象内存空间,访问当前对象成员
有同名局部变量时,必须使用this.xx访问成员变量
2、构造方法间调用
this();
从一个构造方法调用另一个重载的构造方法,目的:减少代码重复
一般从参数少的方法调用参数多的方法
必须是首行代码

正确

    public Student(int id,String name){
this(id,name,null);
}

错误

    public Student(int id,String name){
System.out.println("xx");
this(id,name,null);
}

练习:求坐标点距离

Point类

public class Point {
int x;
int y;

public Point(int x,int y){
this.x = x;
this.y = y;
}

public String tostring(){
return "("+x+","+y+")";
}

public double distance(){
return Math.sqrt(x*x+y*y);
}
}

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="4"
android:orientation="vertical"
android:rowCount="6">


<EditText
android:id="@+id/xEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="x"/>

<EditText
android:id="@+id/yEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="y"/>

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="student()"
android:onClick="doClick"
/>


<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>



LinearLayout>

MainActivity

public class MainActivity extends AppCompatActivity {
Point point;

EditText xEditText;
EditText yEditText;
Button button1;
TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

xEditText = (EditText) findViewById(R.id.xEditText);
yEditText = (EditText) findViewById(R.id.yEditText);
button1 = (Button) findViewById(R.id.button1);
textView = (TextView) findViewById(R.id.textView);
}

public void doClick(View view) {
switch (view.getId()) {
case R.id.button1:
f1();
break;
}
}

private void f1() {
String x = xEditText.getText().toString();
String y = yEditText.getText().toString();
Point point = new Point(Integer.parseInt(x),Integer.parseInt(y));
textView.setText(point.tostring()+"\n"+point.distance());
}
}

方法重载Overload

同名不同参

练习:求两点之间距离

Point类

public class Point {
int x;
int y;

public Point(int x,int y){
this.x = x;
this.y = y;
}

public String tostring(){
return "("+x+","+y+")";
}

public double distance(){
return Math.sqrt(x*x+y*y);
}

public double distance(Point p){
int dx = x-p.x;
int dy=y-p.y;
return Math.sqrt(dx*dx+dy*dy);
}
}

xml

不变

MainActivity

仅修改f1方法

    private void f1() {
int x = Integer.parseInt(xEditText.getText().toString());
int y = Integer.parseInt(yEditText.getText().toString());
Point point1 = new Point(x,y);
textView.setText(point1.tostring()+"距远点距离"+point1.distance()+"\n");

Point point2 = new Point(new Random().nextInt(10),new Random().nextInt(10));
textView.append(point1.tostring()+"距离"+point2.tostring()+"\n"+point1.distance(point2));
}

推荐阅读
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了在Java中检查字符串是否仅包含数字的方法,包括使用正则表达式的示例代码,并提供了测试案例进行验证。同时还解释了Java中的字符转义序列的使用。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • struts2重点——ValueStack和OGNL
    一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot( ... [详细]
author-avatar
珍妮20111030
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有