2020年秋Java学习第一章数组+第二章类与对象

一数组

数组元素类型:基本数据类型或者引用类型,当数组元素是引用数据类型,new出来的也是引用数据类型

每个数组都有一个成员变量length>=0,数组创建之后length不能改变

1.数组的声明

Type[] arrayname;//Type arrayname[];

注意:声明了数组名不能直接使用,必须经过初始化为其分配内存后才能使用。

2.数组的创建

int[] a;a=new int[8];  等价于 int[] a=new int[8];

3.数组元素的初始化

int a[]={1,2,3,4,5];

4.数组的引用

引用数组元素:利用数组名和下标确定

注意:元素下标最大值为length-1,一旦下标超过最大值,将会出现数组越界;

二.类与对象的基本概念

面向对象程序的基本组成单位是:类,程序在运行时生成对象,对象之间传递信息;主要概念:抽象、封装、继承、多态

通过封装规定了如何使用对象的数据,控制用户对类的修改和数据访问权限,多数情况下会禁止直接访问对象的数据,只能通过接口访问对象;

Java语言仅支持单继承;

多态是指一个程序中同名的不同方法共存的情况,主要通过子类对父类的覆盖实现的

1.类与对象

类是具有相同操作功能和相同数据格式(属性)的对象的集合和抽象

(1)类的声明

类的语法说明:

[public][abstract|final] class arrayname [<Type{,Type>} [extends 父类名称】

[implements 接口名称列表]

{

     变量成员声明以及初始化;

    方法声明及方法体;

}

说明

a.class是关键字,表明其后声明的是一个类

b.class 前的修饰符可以有多个,用来限定类的使用方式。public为存取控制符,指明此类是公有类,abstract指明该类是抽象类,final说明该类是终结类,不能产生子类;

c.类名应该时候一个合法的标识符,遵从命名规则;

d.extends是关键字,所声明的类是从某一类派生而来的,父类名字应该写在extends后面;

e.implements 是关键字。所声明的类要实现某些接口,接口名字写在implements后面

public class Clock{

    int hour;
    int minute;
    int second;//成员变量
}

//成员方法
 public void setTime(int newH,int news)
{
     hour-newH;
     minute=newM;
     second=newS;
}
public void showTime()
{
     System.out.printIn(hour+":"+nimute+":"+second);

}

 (2)对象的声明与引用

类X的一个对象就成为类X的一个实例。一个实例是一个类的特定个体

语句:new <classname>();

语句作用:在内存中为此对象分配内存空间,并且返回对象的引用(相当于对象的存储地址)

(3)数据成员

声明成员变量必须给出变量名及其所属类型,同时还可以指定其他特性,声明格式如下:

[public|protected|private] [static][final][transient][volatile] 变量数据类型

  变量名=变量初始值;

说明:

a.public,protected、private为访问控制符

b.static指明这是一个静态成员变量;

c.final指明变量的值不能改变

d.transient指明变量是临时变量

e.volatile指明变量是一个共享变量;

 (3.1)static的用法:没有static修饰的变量称为实例变量,有static修饰符的变量称为类变量(或者静态变量)

     实例变量:用来存储所有实例都需要的属性信息  属性值的得到: 实例名.实例变量名

   例如x=new Circle(); //注意:此时如果打印x得到将会是一个地址 x.radius则是属性值

说明:可以将一个类的声明放在一个单独的文件里面,也可以将多个类的声明放在一个文件中(注意:此时最多只能有一个类为公有类,即说明为:public)。

JAVA源文件名必须根据文件中的公有类命名,并且区分大小写。

类变量:属性变量经常用来共享,可以通过为其加上static修饰符使其成为静态变量(类变量)

例如:在Circle类中: static double PI=3.1415926;注意:类变量的值存储在类里面,实例属性的值存储在实例中

类变量的值:类名|实例名.类变量名   //注意:类变量在整个类中只有一个值

4.方法成员:通过方法成员定义类的行为

声明格式:

[public|protected|private][static][final][abstract][native][synchronized]

[<type{,type}>] 返回类型 方法名([参数列表])[throws exceptionList]

{

    方法体

}

说明:

(1)public 、proteced、private为访问控制符;static指明方法是一个类方法;final指明方法是一个终结方法;abstract指明方法是一个抽象方法;native用来将java代码和其他语言的代码集合在一起;sysnchronzied用来控制多个并发线程对共享数据的访问。

(2)参数的类型可以是简单数据类型,也可以是引用数据类型//当参数类型为基本数据类型时,采用值传递方式;当参数类型时对象类型或数组类型,采用引用传递方式

(3)方法体是对方法的实现。

(4)throws exceptopnList用来处理异常

使用过程:对象名.方法名([参数列表})

方法成员分类:实例方法以及类方法(静态方法)

 实例方法:表示特定对象的方法,在声明前不加static修饰符

 (6).类的访问控制

(6.1)类的访问控制只有public(公共类)和无修饰符(默认类)两种;当使用public修饰符时,所有其他的类都可以使用此类;当没有修饰符的时候,则只有于此类处于同一包中的其他类可以使用此类。

(7).类成员的访问控制

类成员的访问控制符有:public、private、protected和无修饰符

public:表示公有,可以被其他任何成员访问(前提是对类成员所在的类有访问权限)

private:类中限定为private的成员只能被这个类本身访问,在类外不可访问

protected:只可以被同一类以及子类的实例对象所访问

无修饰符(默认的):可以被所在包中的各类访问

注意:当在一个类中声明的变量为private,如果要允许其他类访问,则要声明相应的公有方法:例如set和get方法

get方法:格式

public:<fieldType>get <fieldname>()

{

     return <fieldName>;

}

例:

public int getRadius()

{

      return radius;

}

set方法:格式

public void set <fieldname> (<filedType><paraname>)

{

     <fieldbame>=<paramname>;

}

例:public void setRadius(int r)

{

     radius=r;

}

关键词this的使用:

如果形式参数名与实例变量名相同,则需要在实例变量名之前加this关键字,否则系统会将实例变量名当成形式参数;

例:public void setRadius(int radius)

{

   this.radius=radius;

}

3.对象初始化和回收

系统在生成对象时,会为对象分配内存空间,并且自动调用构造方法对实例变量进行初始化,当对象不再使用时,系统会调用垃圾回收程序将其占用的内存回收;

(1)构造方法:用来初始化该类的一个新的对象。构造方法与类名有相同的名称,而且不返回任何数据类型

特点:构造方法的方法名与类名相同;

构造方法没有返回类型(修饰符void也不行)

构造方法可以被声明为共有的(public)

构造方法可以有任意多个参数

主要工作是完成对象的初始化

构造方法不能在程序中显式地调用

在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象初始化

(1.1)系统默认的构造方法:

如果在类声明中没有声明构造方法,Java编译器会提供一个默认的构造方法:没有参数,方法体为空。使用默认的构造方法初始化对象时,如果在声明中没有给实例变量赋初值,则对象的属性值为0或者空;

 1 class BankAccount
 2 {
 3   String ownerName;
 4   int accountName; 
 5   float balance;
 6 
 7 }
 8 public class BankTester
 9 {
10      public static void main(String srgs[])
11       {
12           BankAccount myAccout=new BankAcount();
13           System.out.printIn("ownerName="+myAccount.ownerName);
14           System.out.printIn("accountName="+myAccount.accountName);
15           System.out.printIn("balance="+myAccount.balance);
16             
17         }
18 
19 
20 }

(1.2)自定义构造方法与方法重载

1 public BankAccount(String initName,int initAcoountNumber,float initbalance)
2 {
3 
4    ownerName=initName;
5    accountNumber=initAccountNumber;
6    balance=0.0f;
7 }
8 #注意:自定义参数个数<=总的参数个数

(1.3)自定义无参的构造方法

用户在进行类声明中,如果没有声明任何构造方法,系统会赋给此类一个默认(无参)的构造方法,但是,只要用户声明了构造方法,即使没有声明无参的构造方法,系统也不会再赋默认的构造函数;

在声明构造方法时,好的声明习惯是:或者不声明构造方法,如果声明构造方法,则至少声明两个构造方法,其中一个为无参构造方法;

举例

1 #无参的构造方法
2 
3 public BankAccount()
4 {
5    ownerName="";
6    accountName=999999;
7    balance=0.0f;
8 }

(1.4)this关键字的使用(少参的构造函数调用多参的构造函数)

使用this关键字在一个构造方法中调用另外的构造方法

public BankAccount()
{

     this(" ",99999,0.0f);
}
public BankAccount(String initName,int initAccountNumber)
{
     this(initName,initAccount,0,0f);

}
public BankAccount(String initName,int initAccountNumber,float initBalance)
{

   ownerName=initName;
   accountNumber=initAccountNumber;
    balance=initBlance;
}

(2)内存回收技术

Java运行时系统通过垃圾收集器周期性地释放无用对象所使用的内存。当一个对象在程序中不再被使用时,即当前的代码段不属于对象的作用域或者把对象的引用赋值为空,则该对象就成为一个无用对象。

Java的垃圾收集器自动扫描对象的动态内存区,对不再使用的对象做上标记进行垃圾回收。

Java的垃圾收集器作为一个线程运行,当系统的内存用尽或者在程序中调用System.gc()要求进行垃圾回收是,垃圾收集线程与系统同步运行,否则垃圾收集器在系统空闲时异步地执行。

Java的每一个类都有一个finalize方法()用于释放资源。如果一个类需要释放除了内存以外的资源,则需要在类中重写finalize()方法。

原文地址:https://www.cnblogs.com/zhaoyiyao/p/13822791.html