Java Study Day5 ,Day6

JavaSE day5:

一、数组(续)
1、多维数组(了解)
java中多维数组的元素是(数组)引用数据类型,故可以有阶梯状的数组,即同级数组的元素个数可以不同
二、类和对象
1、问题:
什么是类? (如:自行车的设计图)
什么是对象? (如:一辆辆的自行车)
为什么要设计类和对象的机制? (面向对象编程)
状态 + 行为
属性 方法
2、面向对象的三大特性 -- 封装性,继承性,多态性
1)封装性:所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。简而言之就是,内部操作对外部而言不可见(保护性)
2)继承性:继承是指这样⼀种能力:它可以使⽤现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
3)多态性:所谓多态就是指⼀个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。
面向对象名词扩展:OOA - 面向对象分析;OOD - 面向对象设计;OOP - 面向对象编程
3、语法
1)定义类的语法
修饰符(modifier) class 类名称 {
1、属性(可有可无)
2、方法(可有可无)
3、构造方法(如果没有定义构造方法,系统会自动生成一个无参构造)允许重载
}
Eg:public class HelloWorld { ...}
1>如何定义属性
修饰符 变量类型 变量名称;
默认值:
2>如何定义方法
修饰符 返回值类型 方法名称(形参列表) {
实现
}
Eg:public static rotate(int[] a,int k) { ...}
3>如何定义构造方法(如果没有明确写出,系统会自动补充一个无参构造方法;有则不补)
修饰符 类名称(形参列表) {
}
2)构造对象的语法 | 对象实例化的语法
create object | instance(动词)
类名称 变量名称 = new 类名称(实参列表)
引用类型 - 类引用
只要出现了关键字new就开辟了内存
一个文件中只能有一个public的类,该类的名称必须和文件名一致
一个类会生成一个 .class 字节码文件
对象中存储的主要是属性,也可以找到方法区中对象对应的类
对象(引用数据类型)必须在实例化后调用,否则会产生NullPointerException(运行时报错),编译时不会出错
Eg:Person p = null;
//定义了一个没有指向任何对象的Person类型的引用(类类型的引用)
Person p = new Person(...);
//定义了一个Person类型的对象
//定义了一个指向Person类型的对象的Person类型的引用(类类型的引用)
垃圾空间:没有任何栈内存指向的堆内存空间
由于匿名对象不会有任何的栈空间所指向,所以使用⼀次后就成为垃圾空间。
4、实例化对象的过程
1)new 关键字 计算对象需要的内存大小,开辟空间,初始化为0x0
p = malloc(sizeof(Person));
memset(p,0x0,sizeof(Person));
2)调用构造方法,对属性初始化
3)构造方法调用结束,返回一个指向新对象的引用
Person tmp = 新的对象;
5、如何访问对象的属性(内部 | 外部)
如何调用对象的方法(内部 | 外部)
1)内部(在类的方法中访问类的属性和调用类的方法)
属性:直接通过属性名称访问即可(出现命名遮挡时用this.属性名)
方法:直接通过过方法名称调用即可
2)外部(在其他类的方法中访问该类的属性和调用该类的方法)
属性:对象的引用.属性名称
方法:对象的引用.方法名称(实参列表)
6、其他(注意区分两种调用)
1)嵌套调用
System.out.println(Arrays.toString(rotate(new int[]{1,2,3,4,5},3)));
分解如下:
int[] tmp1 = new int[]{1,2,3,4,5};
int[] tmp2 = rotate(tmp1,3);
String tmp3 = Arrays.toString(tmp2);
System.out.println(tmp3);
2)链式调用(暂时不能有一个很好的实例)
7、this关键字的使用
1)在构造方法中调用其他构造方法,调用语句必须出现在第一行(形如:this(参数))
2)通过this访问属性或方法(一般出现在发生了命名遮挡的时候)(this.方法名称(参数))
3)this代表的就是当前对象的引用(current object)
普通属性和普通方法,其实都绑定着一个隐含的对象
标准输入 stdin 键盘
标准输出 stdout 屏幕
标准错误 stderr 屏幕

JavaSE day6:

一、类和对象(续)
1、访问限定符
包(package) eg:import.java.util.Arrays
拓展 定义包:
(1)新建目录,目录名称就是包名称(全小写,单词之间用下划线“_”分隔)
Eg:package hello_world;
(2)定义目录 p1/p2/p3; 定义一个类HelloWorld
Eg:package p1.p2.p3;
(3)使用包
import 包名称.类名称
Eg:import p1/p2/p3.HelloWorld;
1)限定符 2)影响的是访问权限
两种情况:修饰顶级的(top-level); 修饰成员级(meber-level)
四种访问限定符(封装):
1)public -- public(定义语法) -- 所有类都有访问权限
2)package-private -- 空白 -- 只有一个包的类有访问权限
3)protected -- protected -- 该部分内容待定(涉及继承)
4)private -- private -- 只有本类有访问权限
public和package-private是可用于顶级的访问权限
2、静态(静态方法和静态属性)
方法 普通方法 | 静态方法(类方法)
属性 普通属性 | 静态属性(类属性)
语法:被限定符(static)修饰
含义:和对象解绑,即静态属性不再保存在对象(堆区)中,而是保存在类(方法区)中,静态方法调用时,没有隐含着的对象,故无法使用this关键字
1)访问静态属性/调用静态方法的语法
内部:1>属性名称 2>类名称.属性名称 3>this.属性名称(保证当前方法不是静态方法)
1>方法名称(实参) 2>类名称.方法名称(实参) 3>this.方法名称(保证当前方法不是静态方法)
外部:1>类名称.属性名称 2>对象的引用.属性名称
1>类名称.方法名称(实参) 2>对象的引用.方法名称(实参)
强调:
在静态方法(静态上下文)中,无法使用this关键字,因为没有一个隐式的对象和该方法绑定(不能访问普通属性,不能调用普通方法)
一个类的所有对象,是可以共享静态属性的
3、属性的初始化
1)普通属性的初始化(发生在对象实例化的时候)
1>定义时初始化 int a = 10;
2>构造代码块 { a = 10; }
3>在构造方法中初始
注释:上面三个初始化同时出现时,1>和2>优先按定义顺序执行,最后执行构造方法
2)静态属性的初始化(发生在类被加载的时候)
拓展:类的信息一开始是以字节码(bytecode)形式保存在磁盘上的,类的加载过程就是类加载器(ClassLoader)在对象的目录上找到指定类的字节码文件,并且进行解析,然后放到内存的方法区的过程;类只有在被用到的时候才会进行加载。
类的加载一定是发生在对象实例化之前
1>定义时初始化 static int a = 10;
2>静态构造代码块 static { a = 10; }
3>静态构造方法
注释:上面三个初始化同时出现时,1>和2>优先按定义顺序执行,最后执行构造方法

Java Study Day5 ,Day6
Java Study Day5 ,Day6
Java Study Day5 ,Day6
Java Study Day5 ,Day6
Java Study Day5 ,Day6
Java Study Day5 ,Day6
Java Study Day5 ,Day6
Java Study Day5 ,Day6
Java Study Day5 ,Day6
Java Study Day5 ,Day6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值