Java learning_Day3(下)

本人学习视频用的是马士兵的,也在这里献上

<链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA>

提取码:fobs

内容

  • 方法的重载
  • 关键字this
  • 关键字static
  • package和import语句

方法的重载

方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。

比较下面两段代码

void max(int a, int b) {
System.out.println(a > b ? a : b);
}
void max(float a, float b) {
System.out.println(a > b ? a : b);
}

上面两个方法的返回类型和方法名相同,参数类型不同,构成重载。

当编译器执行完整的代码

public class TestOverload {
void max(int a, int b) {
System.out.println(a > b ? a : b);
} void max(float a, float b) {
System.out.println(a > b ? a : b);
} public static void main(String[] args) {
TestOverload t = new TestOverload();
t.max(3, 4);
}
}

此时编译器可以通过核对方法传入的参数类型得出代码段想要执行的方法。

以上例子可以说明,对于同一类中方法名、返回类型相同的方法,编译器可以通过比较形式参数的数据类型,形式参数的数量,甚至形式参数的排列顺序来得知需要调用的方法。

构造方法的重载

构造方法也可以构成重载

class Person {

	Person() {
id = 0;
age = 20;
} Person(int _id) {
id = _id;
age = 23;
} Person(int _id, int _age) {
id = _id;
age = _age;
}

由于传入的参数不同,对象Person在初始化时将根据传入的参数进行相应的初始化。

关键字 this

  • 在类的方法定义中使用的this关键字代表使用该方法的对象的引用。
  • 当必须指出当前使用方法的对象是谁时要使用this。
  • 有时使用this可以处理方法中成员变量和参数重名的情况。
  • this可以看做是一个变量,它的值是当前对象的引用。

观察下面代码

public class Leaf {
int i = 0; Leaf(int i) {
this.i = i; //调用类Leaf的i属性,使之赋值为形参i的值
} Leaf increment() {
i++;
return this; //返回类Leaf本身的引用
} void print() {
System.out.println("i = " + i);
} public static void main(String[] args) {
Leaf leaf = new Leaf(100);
leaf.increment().increment().print(); //两次使用increment,每次都返回对象的引用,每次返回前都会使i自增
}
}

输出结果:

i = 102

关键字 static

  • 再类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时就被初始化,对于该类的所有对象来说,static成员变量只有一份。
  • 用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。
    • 静态方法不再是针对于某个对象调用,所以不能访问非静态成员。
  • 可以通过对象引用或类名(不需要实例化)访问静态成员。

观察下面代码

public class Cat {
private static int sid = 0;
private String name;
int id;
Cat(String name) {
this.name = name;
id = sid++;
}
public void info(){
System.out.println
("My name is "+name+" No."+id);
}
public static void main(String arg[]){ Cat.sid = 100;
Cat mimi = new Cat("mimi");
mimi.sid = 2000;
Cat pipi = new Cat("pipi");
mimi.info();
pipi.info();
System.out.println(Cat.sid);
}
}

输出结果:

My name is mimi No.100
My name is pipi No.2000
2001

对于上述代码中的静态变量sid,其不依赖于某个“mimi”或者“pipi”对象,直接通过Cat类进行访问。也因此不会因为某个对象的初始化而改变,从而可以作为计数器。

与静态变量sid相反,成员变量id不能在入口函数main中赋值,因为成员变量依附于某个对象而被存储,否则会报错: 错误: 无法从静态上下文中引用非静态 变量

package 和 import 语句

  • 为便于管理大型软件系统中数目众多的类,解决类的命名冲突的问题,Java引入包(package)机制,提供类的多重命名空间。
  • package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。
    • 格式为: package pkg1[.pkg2[.pkg3…]];
  • Java编译器把包对应于文件系统的目录管理,package语句中,用 . 来指明包(目录)的层次
    • 例如语句: package com.sxt; 改文件中所有的类位于 .\com\sxt 目录下
  • 如果将一个类打包,则使用该类是,必须使用该类的全名(例如:com.sxt.MyClass),Java编译器才会找到该类。
  • 也可以使用import在文件开头引入要使用的类,例如
import com.sxt.Myclass;
import java.util.* //引入java.util包中所有的类
... ... ...
MyClass myclass = new MyClass(); //可以直接使用类名
  • 可以不需要用import语句直接使用java.lang包中的类
  • class文件的最上层包的父目录必须位于classpath下

JDK中主要的包

  • java.lang:包含一些Java原因的核心类,如String、Math、Integer、System和Thread,提供常用功能。
  • java.awt:包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
  • java.applet:包含applet运行所需的一些类。
  • java.net:包含执行与网络相关的操作的类。
  • java.io:包含能提供多种输入/输出功能的类。
  • java.util:包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。

将自己的java文件打包的方法:

快捷键win+r,输入cmd,cd到java文件的目录下,输入 jar -cvf xx(包的名字).jar *.*

Java_Day3(下)的更多相关文章

  1. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  2. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

  3. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  4. Ubuntu下使用nvm

    写在前面:刚写着写着博客就跨年了,希望新的一年大家万事如意,一切向"前"看! 安装 wget -qO- https://raw.githubusercontent.com/crea ...

  5. Cmder--Windows下命令行利器

    cmder cmder是一个增强型命令行工具,不仅可以使用windows下的所有命令,更爽的是可以使用linux的命令,shell命令. 安装包 安装包链接 下载后,直接解压即用. 修改命令提示符λ为 ...

  6. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  7. GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级

    一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...

  8. [APUE]UNIX进程的环境(下)

    一.共享库 共享库使得可执行文件中不再需要包含常用的库函数,而只需在所有进程都可存取的存储区中保存这种库例程的一个副本.程序第一次执行的时候或第一次调用某个库函数的时候,用动态链接方法将程序与共享库函 ...

  9. ASP.NET Aries 入门开发教程4:查询区的下拉配置

    背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...

随机推荐

  1. Vue.js 计算属性computed和methods的区别

    在vue.js中,有methods和computed两种方式来动态当作方法来用的 如下: 两种方式在这种情况下的结果是一样的 写法上的区别是computed计算属性的方式在用属性时不用加(),而met ...

  2. BP神经网络拟合给定函数

    近期在准备美赛,因为比赛需要故重新安装了matlab,在里面想尝试一下神将网络工具箱.就找了一个看起来还挺赏心悦目的函数例子练练手: y=1+sin(1+pi*x/4) 针对这个函数,我们首先画出其在 ...

  3. deepin系统修改IP地址记录

    今天在配置软路由的时候需要设备有线网卡为静态地址,于是便按照如下方法进行修改: 1.备份网络配置文件: sudo cp /etc/network/interfaces /etc/netword/int ...

  4. C++ Primer 抄书笔记(一)

    操作系统通过调用main函数(function)来运行C++程序: int main(){ ; } main函数返回类型必为int.大多数系统中main的返回值被用来指示状态.0即成功:非0由系统定义 ...

  5. mysql必知必会--排序检索数据

    排序数据 其实,检索出的数据并不是以纯粹的随机顺序显示的.如果不排 序,数据一般将以它在底层表中出现的顺序显示.这可以是数据最初 添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺 序将会受 ...

  6. 用Excel排值班表用到的几个公式

    用Excel排值班表用到的几个公式 最近,疫情得到了一定的缓解,但还不能放松.所以,各单位都加强值班.那就得排值班表.提到的表当然要用Excel,为什么?因为Excel中的公式真得能让我们提高工作效率 ...

  7. 【终端命令】组管理 和 Ubuntu中的"sudo"命令

    一.超级用户root 1.超级用户和标准用户 Linux系统中的root账户通常 用于系统的维护和管理,对操作系统的 所有资源 具有所有访问权限. 在大多数版本的Linux系统中,都 不推荐 直接使用 ...

  8. java 开发中 dom4j的简单用法

    Java中处理XML的方式有很多种,个人任务dom4j还是比较好用的.下面介绍以下简单的使用方法 先把import补充上 import org.dom4j.Document; import org.d ...

  9. javascript中DOM获取和设置元素的内容、样式及效果

    getElementById() 根据id获取dom元素 没有找到则返会Null <!DOCTYPE html> <html lang="en"> < ...

  10. 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase的shell应用v2.0

    HRegion 当表的大小超过设置值的时候,HBase会自动地将表划分为不同的区域,每个区域包含所有行的一个子集.对用户来说,每个表是一堆数据的集合,靠主键来区分.从物理上来说,一张表被拆分成了多块, ...