====前言=========

为了个人兴趣,和今后出路,开始学JAVA了。

仔细想想,其实没有系统学过编程课。都是自己看文章学的。在网上找来一个《黑马程序员毕向东 Java视频教程》来学学试试。

问题:JAVA考级在哪里考?

心得:把键盘打得哗哗的真爽

========= JAVA 环境============

心得:

1. 包含关系JDK>JRE>JVM

2. Java3中注释方式,单行//, 多行 /**/, 文档/** ... */ 文档是特有的。注释可以用来debug

 

=========对象的概念===============

 面向对象的好处

    面向过程和面向对象,面向对象, programmer是指挥者
    复杂程序简单化
JAVA开发
    找对象
    建对象
    用对象
    维护对象的关系
类和对象
学习方法。
名词提炼法。

 

===============JAVA对象内存图============================

wKiom1OH5mWjrcI0AAAuLJsoB5U598.png

============================================

匿名对象,

比较简便

1. new car().run不能改变属性,只能调用行为(只需要运行一次的时候)

2.show( new car()) 可以作为参数被传递

 

=========private关键字===================================

权限在user访问不到的范围内,就是封装private是封装的一种表现形式

(lj) class里面的属性设为private的原因是为了不要直接访问属性的值

之所以对外提供访问方式,是为了在访问方式中加入逻辑判断语句,提高代码的健壮性

 

封装原则:

1. 将不需要对外提供的内容都隐藏

2. 把属性都隐蔽,提供公共方法对其进行访问

 

变量只有两种操作方式:

1. 设置值 set

2. 获取值 get

 

---------above May27------

=========重载====================================

函数名字一样,参数不一样

 

 

==========构造函数==================================

 

构造函数

  1. 名字跟所在class一样

  2. 不用定义返回值

  3. 不用写return

构造函数参数不一样,对应不同的初始化方式

构造函数在对象一建立就运行,只执行一次。

 

 

---------above May28------

==========构造函数=================

 

构造代码区块:每次对象被创造的时候,call一次。

 

  • 构造函数如果都私有化了,那么这个类是不能被初始化的,所以必须有一个构造函数是public

 

  • 构造函数不允许循环调用

 

 

========== this =============================

this 代表本类的对象

 

局部变量和成员变量相同

class Person

{

                privateString name;

 

                Person( String name)

                {

                                name= name; //都是局部的name.因为局部跟成员变量相同

                }

}

 

Person ( String name)

                {

                                this.name = name; //用来区分局部变量和成员变量相同的情况

                }

 

=========== this语句 this() [注意,非this,this语句]=====================

只能在,构造函数间调用

Person( String name, int age)

{

                Person(name);=> this(name) // this语句只能放在构造函数的第一行

                this.age= age;

}

 

 

=========内存分区================================

内存分3个区

1栈内存

2堆内存

3方法区(数据区,共享区):类中的方法,类中的共享数据也在方法区。

========== static ===========================

用法:

  • 静态修饰内容被对象们所共享

  • 不在堆内存中,在方法区。

  • 只能修饰成员变量+成员函数,不能修饰局部变量

  • 当成员被修饰为static时,除了可以被对象调用外,还可以直接被类名所调用,不需要创建对象。格式“类名.静态成员”System.out.println(Person.country);

 

 

静态存在的理由:共同数据取出来单独存放一个地方,没必要每个对象中都放一个,比较占用内存空间

 

wKioL1OH5jmRTDkAAAA5PeDXWsc470.png

静态特点:

  1. 随着类的加载而加载(注意不是对象创造时,是类存在,static数据就存在)

静态会随着类的消失而消失,即生命周期最长。

比成员变量时间长

String name;                      //成员变量,实例变量,只有对象被创造时,才存在

Static String country;      //静态成员变量,类变量,只要类存在,就存在

  1. 优先于对象存在

明确一点,静态变量是先存在的。对象是后存在的。

  1. 被所有对象所共享

  2. 可以直接被类名做调用

 

实例变量和类变量的区别:

1.存放位置

类变量随着类的加载而存在于方法区中

实例变量随着对象的建立而存在于堆内存中

2.生命周期

类变量生命周期最长,随着类的消失而消失

实例变量随着对象的消失而消失,

 

静态的使用注意事项:

1. 静态方法只能访问静态成员(静态方法+静态变量)

非静态方法  既可以访问静态,也可以访问非静态

2. 静态方法中不能定义 thissuper 关键字。因为静态优先于对象存在。所以不能出现this

3. 主函数是静态的

 

静态有利有弊

利:

1. 对对象的共享数据进行单独空点的存储,节省空间。没有必要每个对象存储一个

2. 可以直接被类名调用

弊:

1. 生命周期过长

2. 访问出现局限性,只能访问静态

 

 

---------above May29------

 

=========主函数=================================

一个特殊的函数,作为程序的入口,可以被JVM所调用

 

public: 代表该函数的访问权限是最大的

static: 代表主函数随着类的加载已经存在了。

void:没有返回值

main:不是关键字,但是是一个特殊的单词,可以被JVM所识别

(stirng[]args) 函数的参数,参数类型是一个数组,数组中的元素是字符窜,存储字符串元素的数组

主函数是固定格式的

 

JVM只认这个格式

 

public static void main ( String[]args)

{

    System.out.println(args.length);

    System.out.println(x[]);//错误语句

   System.out.println(args);

}

结果

0

[Ljava.lang.String;@1901437

 

============主函数传值的形式===============

程序

public static void main ( String[] args)

{

    System.out.println(args.length);

   for ( int x=0; x<args.length; x++)

    {

       System.out.println(args[x]);

    }

}

cmd窗口里输入

C:\java\working\java mainDemo haha hehe huhu

 

========静态函数=============

静态变量对象之间有数据要共享时

静态函数当功能内部没有访问到非静态数据(即,对象的特有数据)

那么该功能可以定义成静态函数

静态成员函数的好处: 不需要创建对象就能使用类里面的函数。                                                                                                                                                                                                                                                                                                                                                                                   

 

---------aboveJun01------

======工具类===========

======什么时候类里面的函数都定义成static====

1. 类里面没有封装特有数据,即,类不需要创建对象

2. 类里面所有函数都没有使用特有数据

就可以将类里面的函数(方法)都设置为static,

此类也叫做工具类

 

=====如何使一个类,禁止创建对象==========

为了更严谨,可以强制让该类禁止建立对象,

做法将构造函数设为私有化

 

class ArrayTool()

{

                private ArrayTool(){}                      //构造函数私有化可以禁止创建对象

               

}

               

==========工具类被他人使用===========

  • 如果CLASSPATH 沒有設定的話Java 會預設為CLASSPATH=.; classpath

  • javac 绝对路径格式javac c:\myclass\ArrayTool.java 或者相对路径javac ArrayTool.java            

  • javac *.java 编译当前路径的*.java文件,如果*.java用到了什么class,classpath里面找。被引用的class文件并不会自动编译。

  • java 运行calsspath里的*.class文件

 

 

例子:

c:\myclass 里面有ArrayTool.java ArrayTool.class

d:\java\working 里面有ArrayToolDemo.java (引用ArrayTool class

cmd如下

d:\java\working  setclasspath=c:\myclass            虚拟机设置classpathc:\myclass

d:\java\working  javacArrayToolDemo.java        javac通过。因为虚拟机编译当前目录java文件,再到classpath里找ArrayTool.java编译,

d:\java\working  javaArrayToolDemo                    java报错,因为虚拟机只到classpath里面的目录找class文件,即c:\myclass 里面没有                                                                                                      ArrayToolDemo.class

d:\java\working  setclasspath=.;c:\myclass         classpath包括当前目录

d:\java\working  javaArrayToolDemo                   

 

==============工具类================

将一个类的方法都定义为static,就可以不建立对象,直接通过类名调用

 

如果要更为严谨,禁止该类建立对象,可以把构造函数设置为private

 

====================文档注释-================

生成帮助文档的类必须是public,

public的类的名字必须和文件名一样

javadoc -d  [要存的网页文件的位置]

 

例子:

C:\myclass> javadoc -d myhelp -author -version Tool.java

生成一个新的folder"myhelp" C:\myclass里面

 

/**

类的注释

这是一个可以对数组进行操作的工具类。提供了最值,排序等功能

@authorLJ

@versionV1.21

*/

 

/**

                方法的注释

                获取一个整型数组中的最大值

                @param arr 接收一个int类型的数组

                @return 会返回一个该数组的最大值

*/

 

如下图,只有public的函数才会在文档中出现,没有标明public/static也不会出现

wKiom1ORjkjgqMI3AAB8ODBoG-E514.png

 

 

 

===============构造函数权限============

一个类中默认会有一个空参数的构造函数

这个函数的权限跟所属的类一致

如果类被public  修饰,那么默认的构造函数也是publi

默认的构造函数不是空参数构造函数,即没写的就是默认的构造函数

 

 ======静态代码块===========

class StaticCode

{

    静态代码块 : 随着类的加载而执行,只执行一次,并优先于主函数

    static

    {

        ....

    }

    构造代码块

    {

    ....

    }

    构造函数

    StaticCode()

    {

    }

}

 

 ======创建对象的过程================

Person p = Person(“张三”,20);

执行顺序:

  1. 类加入内存: 因为new用了到了Person这个class.所以会先找到 Person.clsss 文件并加载到内存

  2. 执行静态代码块: 执行该类中的static代码块,(如果有的话)。给Person.class进行初始化

  3. 开辟空间。分配内存地址

  4. 在堆内存中建立对象的特有属性。并进行默认初始化。(即name = null age = 0)

  5. 对属性进行显示初始化。

  6. 构造代码块初始化

  7. 构造函数初始化(传递参数 张三 20)

  8. 将堆内存地址赋给栈内存中的p变量

==========对象调用成员的过程===================