====前言=========
为了个人兴趣,和今后出路,开始学JAVA了。
仔细想想,其实没有系统学过编程课。都是自己看文章学的。在网上找来一个《黑马程序员毕向东 Java视频教程》来学学试试。
问题:JAVA考级在哪里考?
心得:把键盘打得哗哗的真爽
========= JAVA 环境============
心得:
1. 包含关系JDK>JRE>JVM
2. Java有3中注释方式,单行//, 多行 /**/, 文档/** ... */ 文档是特有的。注释可以用来debug
=========对象的概念===============
面向对象的好处
面向过程和面向对象,面向对象, programmer是指挥者 复杂程序简单化JAVA开发 找对象 建对象 用对象 维护对象的关系类和对象学习方法。名词提炼法。
===============JAVA对象内存图============================
============================================
匿名对象,
比较简便
1. new car().run不能改变属性,只能调用行为(只需要运行一次的时候)
2.show( new car()) 可以作为参数被传递
=========private关键字===================================
权限在user访问不到的范围内,就是封装。private是封装的一种表现形式
(lj) class里面的属性设为private的原因是为了不要直接访问属性的值
之所以对外提供访问方式,是为了在访问方式中加入逻辑判断语句,提高代码的健壮性
封装原则:
1. 将不需要对外提供的内容都隐藏
2. 把属性都隐蔽,提供公共方法对其进行访问
变量只有两种操作方式:
1. 设置值 set
2. 获取值 get
---------above May27------
=========重载====================================
函数名字一样,参数不一样
==========构造函数==================================
构造函数
名字跟所在class一样
不用定义返回值
不用写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);
静态存在的理由:共同数据取出来单独存放一个地方,没必要每个对象中都放一个,比较占用内存空间
静态特点:
随着类的加载而加载(注意不是对象创造时,是类存在,static数据就存在)
静态会随着类的消失而消失,即生命周期最长。
比成员变量时间长
String name; //成员变量,实例变量,只有对象被创造时,才存在
Static String country; //静态成员变量,类变量,只要类存在,就存在
优先于对象存在
明确一点,静态变量是先存在的。对象是后存在的。
被所有对象所共享
可以直接被类名做调用
实例变量和类变量的区别:
1.存放位置
类变量随着类的加载而存在于方法区中
实例变量随着对象的建立而存在于堆内存中
2.生命周期
类变量生命周期最长,随着类的消失而消失
实例变量随着对象的消失而消失,
静态的使用注意事项:
1. 静态方法只能访问静态成员(静态方法+静态变量)
非静态方法 既可以访问静态,也可以访问非静态
2. 静态方法中不能定义 this,super 关键字。因为静态优先于对象存在。所以不能出现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=.; class的path
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 虚拟机设置classpath为c:\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也不会出现
===============构造函数权限============
一个类中默认会有一个空参数的构造函数
这个函数的权限跟所属的类一致
如果类被public 修饰,那么默认的构造函数也是publi
默认的构造函数不是空参数构造函数,即没写的就是默认的构造函数
======静态代码块===========
class StaticCode
{
静态代码块 : 随着类的加载而执行,只执行一次,并优先于主函数
static
{
....
}
构造代码块
{
....
}
构造函数
StaticCode()
{
}
}
======创建对象的过程================
Person p = Person(“张三”,20);
执行顺序:
类加入内存: 因为new用了到了Person这个class.所以会先找到 Person.clsss 文件并加载到内存
执行静态代码块: 执行该类中的static代码块,(如果有的话)。给Person.class进行初始化
开辟空间。分配内存地址
在堆内存中建立对象的特有属性。并进行默认初始化。(即name = null age = 0)
对属性进行显示初始化。
构造代码块初始化
构造函数初始化(传递参数 张三 20)
将堆内存地址赋给栈内存中的p变量
==========对象调用成员的过程===================