Java StuNote 3

来源:互联网 发布:淘宝怎么添加客服号 编辑:程序博客网 时间:2024/05/20 22:00

1.类的构建

   a. 属性

   b. 方法

      属性是主人,方法为属性服务,是仆人。

   c. 类的构建粒度

      满足程序的设计需要即可,未涉及的属性和方法可不加入类的设计。

   

2.进程介绍 

      

计算机内存以进程为单位进行分配。每个进程在逻辑上是隔离的,每个进程都认为自己是这台电脑上的唯一的程序,自己面对是所有的内存空间,这种技术叫做进程隔离技术,保证了系统不会因为一个进程的失败,导致死机。

 

       一个进程可以向操作系统申请内存,进程申请到的内存一般以两种格式来使用,一种是栈(stack)的形式,一种是堆(heap)的形式一个进程可以多个栈,但只有一个堆,一个栈对应的是一个线程,一个进程至少需要一个线程(thread),即至少有一个栈。

 

       我们目前所编制的程序,就是单进程单线程程序,该程序拥有一个stack和一个堆。

 

3. 对象的创建和方法调用

 

   Car c=new Car();

1) 使用class loader读取Car进入代码区 (code area)

2) 在堆栈中创建引用变量c (Car类型)

3) 在堆中申请内存创建裸对象,并初始化this , super以及代码指针等隐式属性。

4) 调用构造方法实现对Car对象自有显式属性的初始化。

5) 获取初始化好的Car对象内存地址赋予引用变量c.

 

   c.showCarInfo();

      1) 通过引用变量cCar对象发出调用showCarInfo()的指令。

2) Car对象收到指令后,立即访问其代码指针,访问代码区中的showCarInfo方法代码并执行。

 

4. 层叠构造方法  (cascade constructor)

 

Student(){

this("mary",12);

}

Student(String name){

this(name,12);

}

Student(String name,int age)

{

this.name=name;

this.age=age;

}

    

层叠构造方法提供了构造方法的多样性,为对象的创建者提供了便利。

层叠构造方法集中所有的处理逻辑在全参构造方法,便于集中修改和维护。

在这里要注意的是在构造方法的互调用过程中,必须用this来替代构造方法名,不能直呼类名。

    

5.实例变量和类变量 

   

   实例(instance)就是对象的意思,更加书面化一些。

   

实例变量也叫做实例属性,每个实例都有一份拷贝,在创建裸对象的过程中,实例变量的空间就会被开辟,在构造函数中,实例变量的空间会被初始化。

   Ex:   int count;

 

   类变量属于类本身,也就是说其属于模板(模具)类变量不在对象中,所有的对象都可以访问类变量,类变量被所有的类对象共享。

   

   在类加载的过程中,将在“静态区“中创建类对象。

    

    Ex:   static int count;

 

1.包(package)的概念

 

      一个好的类名,大家都爱使用,那么在相同类名的情况下,将很难区分类的主人, 所以我们必须给类起一个范围限定(归属), JAVA中是通过包的机制来解决的。

 

     案例:

       张三写的学生类  zhangsan. Student

       李四写的学生类  lisi.Student

       王五编写了一个程序使用到了上述两个学生类:

         zhangsan.Student s=new zhangsan.Student();

    

     包是一种逻辑结构,是一个类的归属标志,同一个包中不能出现雷同的类名。

包在物理上是如何实现的?是通过磁盘目录来表示的。

 

包名也有可能出现雷同的现象,为了避免这种情况的发生,我们一般使用单位的域名倒装来作为包名,因为域名不会出现重复,一个域名作为包名将可能在磁盘上创建多个层级目录。

 

为了避免你所编写的类,在后续的系统中出现使用上问题,请不要书写无包类/默认包类(default package).

 

案例:

package edu.fzu.cs;    //package关键字,说明这个类所属的包

public class Student {

 

}

 

包名必须全部小写

 

2. 包装类(wrapper)

   任何基本类型:byte,int , float ,double, boolean,char (16bits) ….. (没有无符号数据类型)

   Char: utf-8 国际化编码

   在JAVA中都有一个类类型与其对应。

   Int à java.lang.Integer  (java.lang  java语言包, lang=language, 

java.lang包中的所有的类在任何JAVA程序中都由编译器默认导入,语法是:

import java.lang.*;

由于lang包里头的类使用极度频繁,是语言扩展和服务类,为降低程序员的导入负担,该包下的所有类由编译器帮助导入,用户无需手动导入。

)

   

   包装类的主要作用:

a) int à Integer

b) float à Float

c) double à Double

d) boolean à Boolean

e) char à Character

 

1. 弥补基本类型的语意缺失

基本类型无法表示:“没有”

float mark;     0 

Float mark     0 , null

2. 为基本类型提供服务

       System.out.println(Integer.toBinaryString(100));

   System.out.println(Integer.toHexString(100));

   System.out.println(Integer.parseInt("12")+1);

 

类类型创建在堆中,空间消耗很低。

 

   装箱(inbox)和拆箱(outbox)

 

   代表了类类型和基本类型之间的转换行为。

 

   手动版本:

   Integer b = new Integer(10);

   Int a = b.intValue;

 

   自动版本:

   Integer b=30;    à  Integer b=new Integer(30);

   Int a=b;         à  int a =b.intValue();

 

   因为基本类型和类类型之间的换转操作频繁,SUN公司在高版本的JDK中提供了自动装箱和拆箱操作,由编译器帮助你书写转换代码。

 

   在JDK5以上版本才支持自动装箱和拆箱操作。

 

3. String类了解

    

String s=new String("abc");

String m=new String("abc");

 

通过new String()语法将告诉编译器创建新对象,所以这里创建两个字符串对象。

    System.out.println(s==m);

String a="xyz";

String b="xyz";

System.out.println(a==b);

为了兼容C开发者的习惯,SUN也允许不写new String,而字符串赋值。

    当”xyz”这个字符串对象在内存中不存在的时候,系统将创建一个字符串对象,当已经存在的时候,系统将复用这个对象。

 

字符串的不变性(immutable)

任何字符串对象一旦被创建,就不能被更改,通过引用变量导致字符串的修改,都将导致新字符串对象的创建。

 

a=a+"mn";

System.out.println(a==b);

 

    大量的字符串相加操作会产生大量的字符串对象,比如:

    String a=”superstar”;

    a=a+”m”;

    如果有涉及到较多的字符串相加操作,请使用StringBuffer类。

    

     String s=" this is a book! ";

System.out.println(s.length()); //求字符串长度

System.out.println(s.trim().length()); //去除头尾空格

System.out.println(s.toUpperCase());

System.out.println("aBcD".toLowerCase());

System.out.println(s.indexOf('s')); //找出s这个字符在字符串中首次出现的位置

System.out.println(s.lastIndexOf('s'));//找出s这个字符在字符串中最后一次出现的位置

System.out.println(s.indexOf("book")); //找出子串出现的位置

System.out.println(s.indexOf("world!"));

System.out.println(s.toCharArray()[3]);

System.out.println(s.charAt(3));

System.out.println(s.concat("hello,world!")); //字符串相加

System.out.println("abc".compareTo("bca"));  //-1,0,1

System.out.println("abc".compareTo("abc"));  //-1,0,1

System.out.println("cbc".compareTo("bca"));  //-1,0,1

System.out.println("Abc".compareToIgnoreCase("aBc"));

System.out.println(s.contains("book"));

System.out.println(s.endsWith("! "));

System.out.println(s.isEmpty()); //是否为空

System.out.println(s.replace('s''m'));

System.out.println(s.valueOf(1));

System.out.println(1+"");

System.out.println("abcdefg".substring(3));

    System.out.println("abcdefg".substring(3,6));



key: 进程 & 线程

进程是一个逻辑单位,线程类似一个物理单位,进程像班级,线程像学生,一般班级出行申请经费,都是以班级的名字,所以这里表示由

进程进行申请,操作系统只会给进程分配空间,一个进程至少包含一个线程,进程申请了资源,如同班级申请了班费,班费800元,给每个学生平分500元,这500元叫栈,剩下300公用的叫堆- - 

程序猿通过调用栈内的引用变量,对类对象进行发送信号,类对象收到信号后,使用对象的代码指针调用相对应的代码,访问代码的时候有些情况下需要用到类对象的属性内容,于是出现了this指针,this指针的作用是方便代码层更准确的定位到所需对象的属性数据




0 0
原创粉丝点击