目录

一、 面向对象学习

1、快速熟悉面向对象

1.1表格结构和类结构

1.2表格的动作和类的方法

2、面向过程和面向对象思想

2.1面向过程和面向对象的区别

3、对象和类的详解

3.1类和对象的概念

3.2类的定义

3.3属性(field 成员变量)和方法

4、构造方法和构造器

4.1构造方法基础用法(难点)

4.2构造器的重载

5、面向对象的内存分析

5.1java虚拟机内存模型概念

5.2垃圾回收原理的算法

6、java关键字

6.1this关键字

6.2static关键字

6.3package包机制

6.4导入类import


本周开始学习面向对象。

一、 面向对象学习

1、快速熟悉面向对象

1.1表格结构和类结构

实际上,"表格思维"是一种典型的面向对象思维。互联网上所有的数据本质上都是"表格",我们通过表格引入类和对象,原来,"表格就是对象"。

以表格为例,第一行的表格的结构field即为类,下面几行每一行对应一个对象。

不难看出,类比表格只是增加了数据类型而已。

1.2表格的动作和类的方法

在类中定义了一个方法来表示表格中动作的说明。

2、面向过程和面向对象思想

2.1面向过程和面向对象的区别

面向过程适合简单、不需要协作的事务,重点关注如何执行。面向过程是执行者思维。

面向对象思考的是怎么设计这个事物,而不是按什么步骤去执行。面向对象是设计者思维。

比如设计车的时候:先思考车的对象组成, 但制造车的每一个对象时需要执行者(面向过程思维)。

3、对象和类的详解

3.1类和对象的概念

类:我们叫做class

对象:我们叫做Object,instance(实例)。

study a=new study();//这里的a就是study类的一个对象

类是对象的一个模板。

3.2类的定义

//每一个源文件必须有且只有一个public class,并且类名和文件名保持一致!
public class Car{
}
class Type{
}
class Seat{//一个java文件可以同时定义多个class
}

以上的定义都是空类,没有任何意义,因此要定义类的具体信息。对于一个类来说,一般有三种常见的成员:属性field、方法method、构造器constructor。这三种成员都可以定义零个或多个。

public class SxtSut{//属性(成员变量)int id;String sname;int age;//方法void study(){System.out.println("我在学习java!");}//构造方法(与类名保持一致)SxtStu(){}
}

3.3属性(field 成员变量)和方法

属性:属性用于定义该类或该类对象包含的数据或者说静态特征,属性的作用范围是整个类体,在定义成员变量时可以对其初始化,如果不初始化,java使用默认的值对其初始化。整型0,浮点型0.0,字符型"\u0000",布尔类型false,所有引用类型null。

方法:方法用于定于该类或该类实例的行为特征或者功能实现。方法是类和对象行为特征的抽象。与之前所讲到的方法一致。

public class study3{//属性(成员变量)int id;String sname;int age;//方法void study(){System.out.println("我在学习java!");}//构造方法(与类名保持一致)study3(){//如果没有这个定义,编译器会自动默认带上这个无参构造}public static void main(String[] args){//java中所有方法都要在class里面,因此main也要,但其实main只是形式上存在于class内部。study3 s1=new study3();System.out.println(s1.id);//0System.out.println(s1.sname);//nulls1.id=1001;s1.sname="ss";System.out.println(s1.id);System.out.println(s1.sname);}
}

4、构造方法和构造器

4.1构造方法基础用法(难点)

我觉得此处比较难理解,因此举例较多。

构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应该和类的名称一致。Java通过new关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。

构造器的4个要点:

1、构造器一定要通过new关键字调用

2、构造器虽然有返回值,但是不能定义返回值(返回值的类型肯定是本类),不能使用return

3、如果没有定义构造器,编译器会自动定义一个无参的构造函数,如果已经定义了就不会

4、构造器方法一定要与类名一致

析构方法:构造方法其实也是一种方法,只是比较特殊,程序在调用对象的时候会自动调用构造,无需手动调用,而且只会调用一次。

对比下面的图可以看出,c++和java的析构方法是一致的,都是会在调用对象的时候自动调用构造。

下面是求两点距离的两种解决方案:不难看出,因为析构方法在调用对象时会自动调用,不需要像图1一样再写一个成员方法去赋值,所以析构方法主要是进行为对象成员赋初始值(如图2),即在构造方法里就实现赋值,非常方便。

//通过成员方法实现
package studyday1;public class study4{double x;double y;void point(double _x, double _y) {x = _x;y = _y;}double set(study4 a){return ((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y));}study4() {}public static void main(String[] args) {study4 a=new study4();//一定要有这么一行,不然没法对成员变量进行赋值study4 b=new study4();a.point(3.0,4.0);b.point(0.0,0.0);System.out.println(a.set(b));}}
package studyday1;public class study4{double x,y;study4(double _x,double _y) {//构造方法x = _x;//在构造方法里直接实现初始化赋值。y = _y;}double set(study4 a){//参数是main中传进来的另一个类return ((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y));}public static void main(String[] args){study4 a=new study4(3.0,4.0);//因为使用了含参的成员变量,因此在new的时候也要带上参数。study4 b=new study4(0.0,0.0);//可以发现在main方法里面就没有再次调用其他方法进行成员的初始化了,直接在调用方法的时候就已经使用了构造函数System.out.println(a.set(b));//调用a这个类中的set成员方法,参数使用的是b这个类。}
}

4.2构造器的重载

与方法的重载一致,这里使用了this,要记住。

package studyday1;
public class study4 {int id;String name;study4(int id){this.id=id;}study4(int id,String name){this.id=id;//this指向的是被调用的成员所属的对象。是成员里的id。this.name=name;}public static void main(String[] args){study4 a=new study4(5);study4 b=new study4(4,"张三");}
}

5、面向对象的内存分析

5.1java虚拟机内存模型概念

作为了解学习此部分,具体内容可以上网搜索了解。

5.2垃圾回收原理的算法

使用new操作符在堆中开辟数据,在c++中由程序员自己释放内存,在java中系统会自动释放内存。该部分内容也仅作为了解。

6、java关键字

6.1this关键字

在调用的时候,会默认传入this指向创建好的对象的地址。

this关键字调用重载:

package studyday1;
public class study4 {int id;String name;String pwd;public study4(int id,String name){this.id=id;this.name=name;}public study4(int id,String name,String pud){this(id,name);//this()可以用于调用其他构造器,且必须位于第一行//不能这么使用study4(id,name);this.pwd=pwd;}public static void main(String[] args){}
}

6.2static关键字

1、static定义的都属于类里面,而不从属于对象。

2、非静态方法不能通过类名调用,而静态方法可以。

3、非静态方法可以访问静态成员和非静态成员。

package studyday1;public class study5 {int id;String name;String pwd;static String company="公司";public study5(int id,String name){this.id=id;this.name=name;}public void login(){ss();//静态成员变量属于类,因此在这里可以调用,编译不会报错。System.out.println("名字"+name);}public static void ss(){//login();//调用非静态成员,编译就会报错。因为这里还没有建立对象,所以对非静态成员变量无法调用,比如id和name以及login都不行System.out.println("我的公司");}public static void main(String[] args){study5 a=new study5(100,"张三");study5.ss();study5.company="我的公司2";System.out.println(study5.company);}
}

类被加载不一定有对象,因此非静态变量并不一定存在,因此在静态成员变量里面是不能够调用的。而如果对象存在,类一定已经被加载,而类被加载静态成员变量一定已经存在,因此可以在对象里面调用静态成员变量。

6.3package包机制

包机制是java中管理类的重要手段,开发中我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理。包对于类,相当于文件夹对于文件的作用。

package:我们通过package实现对类的管理,package使用的两个要点:

1、通常是类的第一句非注释性语句

2、包名:域名倒着写即可,再加上模块名,便于内管理类。

package命名演示
com.sum.text;//com和sum换了位置
com.oracle.text;
cn.sxt.ji.text;
cn.sxt.ji.vied;

注意事项:

1、写项目时都要加包,不要使用默认包

2、com.ji和com.ji.car这两个包没有包含关系,是两个完全独立的包,只是逻辑上看起来后者是前者的一部分。

6.4导入类import

import:如果我们需要使用其他包的类,需要使用import导入,从而可以在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。import之后,便于编写代码,提高可维护性。

package studyweek2;
//以下两种把一个包里面的某一个导入,如果要整个studyweek1导入就要使用*
import studyweek1.*;//导入studyweek1包里所有的类。
import studyweek1.study5;
import studyweek1.study6;//这个是导入studyweek1中的study6
//如果这里还要导入import studyweek2.study5,不要去记优先级,直接写全导入。public class study2 {public static void main(String[] args){//如果没有使用import,就要这么使用,建议不那么写 studyweek1.study6 a=new studyweek1.study6();study6 a=new study6();//如果在自己的包里没有找到,就会到导入的包里创建对象。a.login();}
}

注意1、java会默认导入java.lang包下所有的类,我们可以直接使用。

2、如果导入两个同名的类,只能用包名+类名来显示调用相关类。

静态导入:导入了某个包里的某个静态属性。

import static java.lang.Math.PI;//导入了Math包里的PI静态属性。

java学习笔记第二周(一)相关推荐

  1. Java 学习笔记 ------第二章 从JDK到IDE

    本章学习目标: 了解与设定PATH 了解与指定CLASSPATH 了解与指定SOURCEPATH 使用package与import管理类别 初步认识JDK与IDE的对应关系 一.第一个Java程序 工 ...

  2. WPF学习笔记-第二周【基本笔刷】

    书接上回,这一次,讲的是WPF中的基本笔刷,由于是菜鸟,就不多说了,继续帖示例代码:) 第一部份 代码 第二章 基本笔刷 第一个 示例 VaryTheBackgroud P38  1     #reg ...

  3. 【学习周报】深度学习笔记第二周

    学习目标: 吴恩达深度学习课程week2 学习内容: 梯度下降法(Gradient Descent) 计算图(Computation Graph) 逻辑回归中的梯度下降(Logistic Regres ...

  4. 软件构造学习笔记-第二周

    本周课程把第六章测试的内容提前讲了一部分,主要为实验1服务,讲了有关测试的概念.作用和基本方法."测试优先"的思想是非常重要的,根据spec写出简单而全面的测试,在方法/类完成后第 ...

  5. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  6. 20155327《Java程序设计》第二周学习总结

    <Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...

  7. 20155313 2016-2017-2 《Java程序设计》第二周学习总结

    20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...

  8. 20172325 2018-2019-1 《Java程序设计》第二周学习总结

    20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...

  9. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

最新文章

  1. sap oracle 内存参数,ORACLE 25个需要深思熟虑重要的初始化参数
  2. 林丹退役,用 Python 看看大家怎么说?
  3. 利用多线程解决多业务不同定时区间歇触发问题的一种方法
  4. opsforhash 过期时间_药品过期还能吃吗?本文带你秒懂药品有效期~
  5. C#中窗口关闭时没有取消事件订阅导致事件重复执行的解决方法
  6. Excel关于使用图形的妙招技法
  7. chime-4 lstm_CHIME-6挑战赛回顾
  8. event.target【转载】
  9. 桌面Linux市场份额终于突破1%
  10. 工作实战: 让 SQL 飞起来
  11. 中控消费机一直显示连接服务器,中控消费机培训及常见问题的解决办法
  12. ghost系统之优劣?
  13. Python实现简单的层次聚类算法以及可视化
  14. java 全量_七、通过java代码实现增量、全量索引
  15. 一个计算机专业学生几年的Java编程经验汇总
  16. 在word中输入大于10圆圈内的数
  17. 基于pytorch的胶囊网络minst图像分类实现
  18. 2021计算机考研改了大纲,2021考研计算机大纲变化!
  19. ECCV2022细粒度图像检索SEMICON代码学习记录
  20. 天池数据集|精品数据集推荐(工业篇)

热门文章

  1. 【Bus】编写一个Demo虚拟的总线-设备-驱动模型
  2. 小程序也能接广告了,微信小程序广告位投放指南!
  3. 关于Obj-c代码静态扫描 iPhone代码静态扫描的问题(clang-analyzer)
  4. 浅析提高倾斜摄影超大场景的三维模型轻量化的数据质量关键技术
  5. 实现动画切换渐进渐出效果
  6. 灭了珊瑚虫,OOXX了SOFF,下一个是谁?
  7. 正则匹配将字符串除首位和末尾以外的字符显示为*
  8. Unity打造科技风智慧城市夜景教程
  9. excel 多列内容合并为一个单元格
  10. Excel合并多个有文本的单元格