zoukankan      html  css  js  c++  java
  • 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()方法。

  • 相关阅读:
    进制转换
    01背包基础
    6-14 Inspector s Dilemma uva12118(欧拉道路)
    9-4 Unidirectional TSP uva116 (DP)
    8-4 奖品的价值 uva11491(贪心)
    9-1 A Spy in the Metro uva1025 城市里的间谍 (DP)
    8-3 Bits Equalizer uva12545
    8-2 Party Games uva1610 (贪心)
    自动发邮件功能
    窗口截图.py
  • 原文地址:https://www.cnblogs.com/zhaoyiyao/p/13822791.html
Copyright © 2011-2022 走看看