Java学习之方法参数、构造器、包

一、方法参数

  1. Java总是按值调用,方法不能修改一个基本数据类型的参数
double percent=10;
harry.raiseSalary(percent);
//percent的值还是10;(相当于形参)

2.对象引用作为参数就不同了,对象引用相当于指针,对象引用变量引用的那个实例对象,会变化。

public static void triplesalary(employee x)
{
	x.raisesalary(200);
	}
harry=new Employee(...);
tripSalary(harry)
  1. x被初始化为harry值的拷贝,这里是一个对象的引用。
  2. raisesalary方法引用于这个对象引用x,x和Harry同时引用的那个employee对象的薪资提高了200%
  3. 方法结束后,参数变量x不再使用,harry继续引用那个已经被提高两倍薪资的对象。
    相当于指针作为函数参数
public static void swap(Employee x, Employee y)
{
	Employee temp=x;
	x=y;
	y=temp;

}

注意,这里调用的只是x和y互相引用的对象,而不是把两个对象的值调换。

二、构造器

1.重载

StringBuilder message=new StringBuilder();
StringBuilder todoList=new StringBuilder("toto");

一个类有多个构造器方法,名字相同,不同参数。就产生了重载
2.默认域初始化
如果构造器中没有给域赋予初值,那么会被自动赋予默认值:数值为0,布尔值为false,对象引用为null;但是应该明确地对域初始化。

3.无参数的构造器

class employee{

public employee(){
a=" ";
salary=0;

				}

}

这是一个无参数构造器,当编写一个类时没有写构造器,系统会提供一个无参数构造器,并且将所有实例域设置为默认值。
但是如果类中提供了至少一个构造器,却没有无参数构造器,那么在new出一个对象实例时没有提供参数,会不合法。

4.显式域初始化 参数名

class employee{
int a=1;
Sting name;
public employee(String name){
this.name=name;

}
}
//这样所有创造出的对象,a的值都是1
//而name可以根据提供的参数值变化
//方法中的name引用的是String name这个参数,不是实例域
this.name才是实例域,this是隐式参数,也就是构造出的对象

5.调用另一个构造器

class ListNode {
   int a;
   String name;
   public ListNode(int a){
       this("殷家乐",1);
   }
   public ListNode(String name, int a){
       this.name=name;
   }

    public static void main(String[] args) {
        ListNode aa=new ListNode(2);
        System.out.print(aa.name);
    }
}

公共的代码部分;
也就是说你创建多个对象时,name总是“殷家乐”,a的值根据你提供的参数产生。

6.初始化块

class employee{
int a;
Sting name;
private static next=0;
		{
			a=next;
			next++;}

当创建对象时,初始化块会被执行。也就是说,每创建一个对象,a的值就是next此时的值,再创建第一个对象,a的值就是next+1的值。

三、包

包部分的知识看不太懂。

  1. 首先一个类可以使用所属包的所有类,以及其他包的共有类(public class)
    有两种方法,在一个类中使用另一个包的共有类
    第一种:
java.time.LocaDate today=java.time.LocaDate.now();
java.time.Date nextday=new java.time.Date();

第二种:

import java.util.* //这样就可以使用java.util包中的所有类了
import java.time.LocaLDate; 
//这样就可以使用java.time包中的LocalDate类
//import语句在package语句后面,在源文件顶部。

只能使用*号导入一个包,不能import java.*或者import java.*.*

但是如果两个包中都有一个名字相同的类,解决方法如下:

import java.util.*;
import java.sql.Date;
Date today=new Date();
//这样导入的类是sql包中的Date类

如果两个类都需要使用

java.util.Date deadline=new Date();
java.sql.Date today=new Date();

分割线
不仅可以导入包,还可以导入静态方法和静态域

import static java.lang.Sytem.*;
//就可以使用System类的静态方法和静态域
out.print(a);

四、类设计技巧

  1. 一定要保证数据私有
  2. 一定要对数据初始化
  3. 不要再类中使用过多的基本类型
  4. 不是所有域都需要独立的域访问器和域更改器
  5. 类名和方法名要能够体现他们的职责
  6. 优先使用不可变的类
  7. 将职责过多的类进行分解
    例如
class nums{
int a=0;
String name="";
public ret(int a,String name){
this.a=a;
Sting name=name;
		}
}
class toge{
nums[] a;
public cardDeck()
{...}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值