Java小记3(第三周)

一、参数传值机制

Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。
基本数据类型参数的传值
传递的是值的副本,副本改变不会影响原件
引用类型参数的传值
传递的是值的副本。但是引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变”
包机制—package的使用
包机制是Java中管理类的重要手段。开发中,我们会遇到大量同名的类,通过包可以解决类重名的问题,也可以实现对类的有效管理。包对于类,相当于文件夹对文件的作用。
!!注意:
1.通常是类的第一句非注释性语句
2.包名:域名倒着写,再加上模块名,便于内部管理类
例如:

com.sun.text;
com.oracle.test;
com.gao;
com.gao.car; //这两个包没有包含关系,是两个完全独立的包
//package的使用
package cn.sxt;
public class Test{
   public static void main(String[] args){
      System.out.println("helloworld");
      }
}
      

JDK中的主要的包

  1. Java.lang:包含一些Java语言的核心类,如String、Math、Integer、System和Thread,它提供常用功能。
  2. Java.awt:包含了构成抽象窗口工具集(abstract、window toolkits)的多个类,这些类被用于构建和管理运管用程序的图形用户界面(GUI)。
  3. java.net:包含执行与网络相关的操作的类
  4. java.io:包含能提供多种输入/输出功能的类
  5. java.util:包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
    import
    使用不同(同级)包内的class方法:
package cn.sxt.gao;

public class Test{
  public static void main(String[]args){
     cn.sxt.oo.User user= new cn.sxt.oo.User();
     }
}
//*******************************************
//通过导入类
package cn.sxt.gao;
import  cn.sxt.oo.User ;
public class Test{
  public static void main(String[]args){
     User user= new User();
     }
}
//*********************************************
import java.sql.Date;
import java.util.*;//导入该包下的所有类,会降低编译速度而不会降低运行速度
//导入同名的处理一般采用第一种:包名+类名显式调用相关类
     

静态导入

public class Test{
  public static void main(String[]args){
  System.out.println(Math.PI);
  }
}
  
  //*********************
  //静态导入
import static java.lang.Math.*;
public class Test{
  public static void main(String[]args){
  System.out.println(PI);
   }
}

面向对象的特征:

1.)继承:
关键字:extends
要点:
!!!1.java中只有单继承即只有一个直接父类
2.java中类没有多继承,接口有多继承
3.子类继承父类可以得到父类全部的属性和方法(除了父类的构造方法),但不一定可以直接访问(父类的私有属性和方法)
4.如果定义一个类时,没有调用extends,则它的父类为:java.lang.Object。
2)封装
3) 多态
instanceof运算符
二元运算符,左侧是对象,右侧是类;当对象是右侧类或子类所创建对象时,返回值为true,否则返回false;
方法的重写override
子类重写父类的方法
子类通过重写父类的方法,可以用自身的行为替换父类的行为。
方法重写的要点:
1.“==”:方法名、形参列表相同;
2.“<=”:返回值类型和声明类型,子类小于等于父类
3.“>=”:访问权限,子类大于等于父类

public class TestOverride{
 public static void main(String[]args){
 Horse h=new Horse();
 h.run();
 }
}
class Vehicle{
  public void run(){
    System.out.println("run");
    }
  public void stop(){
      System.out.println("stop");
     }
   public Person whoispag(){
   return new Person();
   }
}
class Horse extends Vehicle{
public void run(){   //重写1."==":方法名、形参列表相同;
    System.out.println("runrunrun");
    }

public Student whoispag(){      //2.“<=”:返回值类型和声明类型,子类小于等于父类(sudent是person子类)
   return new Student();
   }                           //属于重写
   
public Object whoispag(){  //object是person的父类大于原返回值类型不属于重写
 return new Student();
   }   
}

Object类
object类是所有java类的根基类,也就意味着所有的java对象都拥有object类的属性和方法。
object中的toString方法

public String toString(){
  return getClass().getName()+"@"+Integer.toHexString(hashCode());
  }
//当然toString()可以重写
public String toString(){
  return 语句
  }

equals方法的重写
“==”代表比较双方是否相同。如果是基本类型则表示值相同,如果是引用类型则表示地址相同即是同一对象
equals方法:
public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑。

public class TestEquals{
  public static void main(String[]args){
    Object obj;
    String str;
    User u1=new User(1000,"hu","123456");
    User u2=new User(1000,"huhu","123456");
    System.out.println(u1==u2);
    System.out.println(u1.equals(u2));
    String str1=new String("cc");
    String str2=new String("cc");
    System.out.println(str1==str2);   //false:str1和str2是两个不同的对象
    System.out.println( str1.equals( str2));  //true  内容相同
    
    
    }

  class User{
    int id;
    String name;
    String pwd;
    
    public User(int id,String name,String pwd){
    super();
    this.id=id;
    this.name=name;
    this.pwd=pwd;
    }

@Override
public boolean equals(Object obj){  //重写
  if(this==obj)
  return true;
  if(obj==null)
  return false;
  if(getClass()!=obj.getClass())
  return false;
  User other=(User)obj;
  if (id!=other.id)
  return false;
 return true;
} 
}



super
是直接父类对象的引用,可以通过super来访问父类中被子类覆盖的方法和属性。

public class Testsuper{
 public static void main(String[]args){
   new ChildClass().f();
   }
}
class FatherClass{
  public int value;

  public void f(){
  value =100;
  System.out.println(value);
  }
}
class ChildClass extends FatherClass{
  public int value;
  public void f(){
  super.f();  //调用父类对象的普通方法
  value=200;
  System.out.println(value);
  System.out.println(super.value);  //调用父类对象的成员变量
  }
}

结果:
100
200
100

  

使用ctrl+t查看类的继承层次结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ninkey_19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值