Java自学笔记(4)

说明:

1、可变参数:方法参数部分指定类型的参数个数是可变多个

2、声明方式:方法名(参数的类型名... 参数名)

3、可变参数方法的使用与方法参数部分使用数组是一致的

4、方法的参数部分有可变形参,需要放在形参声明的最后

方法的参数传递

方法,必须有其所在的类 或对象调用才有意义。若方法含有参数:

形参:方法声明时的参数

实参:方法调用时实际传给形参的参数值

Java里方法参数的传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

JVM的内存模型

基本数据类型,值是保存在栈中,引用对象,值保存在堆中,栈中存的对象在堆中的地址

方法的参数传递之基本数据类型

public class TestTransfer{
    public static void swap(int i){
        i=6;
        System.out.println("swap方法里,i的值是"+i);
    }
    public static void main(String[] args){
        int a=0;
        swap(a);
        System.out.println("main方法里,变量a的值是"+a);
    }
}

方法的参数传递之引用对象的传递 

public class DateSwap{
    public int a;
}
public class TestTransfer1{
    public static void swap(DateSwap ds){
        ds.a=6;
        System.out.println("swap方法里,a Field的值是"+ds.a);
    }
    public static void main(String[] args){
        DateSwap ds=new DateSwap();
        System.out.println("执行swap前,main方法里,a Field的值是"+ds.a);
        swap(ds);
        System.out.println("main方法里,a Field的值是"+ds.a);
    }
}

方法的参数传递

1、如果方法的形参是基本数据类型,那么实参(实际的数据)向形参传递参数时,就是直接传递值,把实参的值复制给形参。

2、如果方法的形参是对象,那么实参(实际的对象),向形参传递参数的值,也是把值给形参,这个值是实参在栈内存中的值,也就是引用对象在堆内存中的地址

基本数据类型都是保存在栈内存中,引用对象在栈内存中保存的是引用对象的地址,那么方法的参数传递是传递值(是变量在栈内存的当中的值)

软件包:

包帮助管理大型软件系统:将语义近似的类组织到包中;解决类命名冲突的问题。

包可以包含类和子包。

例:某航空软件系统包括:一组域对象、GUI和reports子系统

关键字——package 

package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。

(若缺省该语句,则指定为无名包)。它的格式为:

package 顶层包名.子包名;

举例:pack\Test.java

          package p1;    //指定类Test属于包p1

          public class Test{

              public void display(){

                  System.out.println("in method display()");                          

              }

          } 

包对应与文件系统的目录,package语句中,用“.”来指明包(目录)的层次;

包通常用小写单词,类名首字母通常大写。

关键字——import

为了使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类(.*)。import语句告诉编译器到那去寻找类。

语法格式:

import 包含[.子包名...].<类名|*>

应用举例:

import p1.Test;    //import p1.*;表示引入p1包中的所有类
public class TestPackage{
    public static void main(String args[]){
        Test t=new Tst();    //Test类在p1包中定义
        t.display();
    }
}

import语句

注意:

若引用的包为:java.lang,则编译器默认可获取此包下的类,不需要再显示声明。

import语句出现在package语句之后、类定义之前

 一个源文件中可包含多个import语句

可以使用import lee.*;语句,表明导入lee包下的所有类。而lee包下sub子包内的类则不会被导入。import lee.sub.*;

import语句不是必需的,可坚持在类中使用其它类的全名

JDK1.5加入import static语句

JDK中主要的包介绍

1、java.lang——包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。

2、java.net——包含执行与网络相关的操作的类和接口。

3、java.io——包含能提供多种输入/输出功能的类。

4、java.util——包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。

5、java.text——包含了一些java格式化相关的类

6、java.sql——包含了java进行JDBC数据库编程的相关类/接口

7、java.awt——包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。

8、java.applet——包含applet运行所需要的一些类。

3.7 面向对象特征之一:封装和隐藏

使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。 

public class Animal {
	public int legs;
	public void eat() {
		System.out.println("Eating.");
	}
	public void move() {
		System.out.println("Moving.");
	}
}
public class Zoo {
	public static void main(String args[]) {
		Animal xb=new Animal();
		xb.legs=4;
		System.out.println(xb.legs);
		xb.eat();xb.move();
	}
}

信息的封装和隐藏

Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:

隐藏一个类中不需要对外提供的实现细节;

使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;

便于修改,增强代码的可维护性;

public class Animal {
	private int legs;//将属性legs定义为private,只能被Animal类内部访问
	public void setLegs(int i) {//在这里定义方法eat()和move()
		if(i!=0&&i!=2&&i!=4) {
			System.out.println("Wrong number of legs!");
			return;
		}
		legs=i;
	}
	public int getLegs() {
		return legs;
	}
}
public class Zoo {
	public static void main(String args[]) {
		Animal xb=new Animal();
		xb.setLegs(4);
		xb.setLegs(-1000);//非法
		System.out.println(xb.getLegs());
	}
}

四种访问权限修饰符

Java权限修饰符public、protected、private置于类的成员定义前,用来限定对象对该类成员的访问权限。

修饰符类内部同一个包子类任何地方
privateYes   
(缺省)YesYes  
protectedYesYesYes 
publicYesYesYesYes

对于class的权限修饰只可以用public和default(缺省)。

public类可以在任意地方被访问。

default类只可以被同一个包内部的类访问。

同一个Java文件中可以有多个class,但只有一个public,其他的class只能是缺省的

3.8 类的成员之三:构造器(构造方法)

构造器的特征

它具有与类相同的名称

它不声明返回值类型。(与声明为void不同)

不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值

构造器的作用:创建对象;给对象进行初始化

如:Order o=new Order(); Person p=new Person(Peter,15);

如同我们规定每一个“人”一出生就必须先洗澡,我们就可以在“人”的构造方法中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自动完成“洗澡”,程序就不必在每个人刚出生时一个一个地告诉他们要“洗澡”了。

构造器

语法格式:

    修饰符 类名(参数列表){

        初始化语句;

    }

举例:

public class Animal{
    private int legs;
    public Animal() { legs=4; }    //构造器
    public void setLegs(int i) { legs=i; }
    public int getLegs() { return legs; }
}
创建Animal类的实例:Animal a=new Animal();
//调用构造器,将legs初始化为4.

根据参数不同,构造器可分为如下两类:

隐试无参构造器(系统默认提供)

显式定义一个或多个构造器(无参、有参)

注意:

Java语言中,每个类都至少有一个构造器

默认构造器的修饰符与所属类的修饰符一致

一旦显式定义了构造器,则系统不再提供默认构造器

一个类可以创建多个重载的构造器

父类的构造器不可被子类继承

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值