编程语言的几个发展阶段

  面向机器语言

  面向过程语言

  面向对象语言:封装、继承、多态

  类声明

class  Person{
.......
} class 植物{ ....... }

  类体

      类使用类体来描述所抽象出的属性 行为,类声明后的一对大括号{ ....... }以及他们之间的内容称作类体

      变量的声明:依赖存储属性的值(体现对象的属性)

      方法的定义:方法可以对类中声明的变量进行操作即给出算法;

成员变量

      成员变量类型:整型,浮点型,字符型,逻辑类型,引用类型:数组类型,对象,接口

      成员变量的有效范围:成员变量在整个类内都有效;

  方法

      

方法头{
方法体
} 方法头:开放权限级别 返回类型 方法名 1.区分成员变量和局部变量
2.局部变量没有默认值

  需要注意的问题

class A{
int a=12;
int b=13;
}
/*
声明的时候同时赋值
*/
class A{
int a;
int b; a=10;
b=44; }
/*
错误的写法,语句不是变量的声明,只能在方法体中出现
*/

  类的UML图

构造方法与对象的创建

  构造方法:无返回类型,方法名与类同名

         默认构造方法:如果类内没有定义该类的构造方法;这默认生成默认的无参的构造方法;倘若类内有定义一个或者多个构造方法这系统不默认生成无参构造方法;

  创建对象

        格式:Class_Name    Object_name

            Class   A;

        new Class_Name:返回的是该类在堆区中开辟内存的引用;对象的引用在栈区中,对象的实体在堆区中;

  使用对象

        对象操作自身的变量:格式:对象.变量

        对象操作自身的函数:格式:对象.函数名()

  对象的引用和实体

        Class   A;   Class B;

        A    a  =   new    A();

        A    b=a;//注意b中存放着是a的值;b即为a的引用;

       垃圾收集:一个类声明的两个对象如果具有相同的引用,那么二者就具有完全相同的实体,而且java有所谓的“垃圾收集”机制,这种机制周期性的检查某个实体是否已        经不再被如何对象所拥有(引用),如果发现这样的实体就释放实体占用的内存;

       如果希望java虚拟机立即进行垃圾收集,操作,可以让System类调用gc()方法;

类与程序的基本结构

       主类:含有main方法的类;

       编译某个目录下的全部java文件:Javac  *.java

参数传值

  传值机制

         传入方法的值是拷贝的数据,所以修改其值不影响原件;

  基本数据类型的传值

         向该参数传递的值的级别不可以高于该参数的级别;例如:不可以向一个int型的参数传递float类型值;

  引用类型的传值

         改变参数变量中所引用的实体;就会导致原变量的实体发生同样的变化;

         改变参数中存放的“引用”不会影响向其传值的变量中存放的“引用”,反之亦然;

  可变参数

         定义:在方法声明时不给出参数列表中从某项开始至最后一项参数的名字,和个数但是这些参数的个数必须相同;

         格式:用   ...  表示若干参数,这些参数类型必须相同;

            

public   void   fun(int   ... x)

         

public   void   fun(double  d,int   ... x)
//错误的写法
public void method(int ...x ,int y)
/*
错误的使用了可变参数x,因为可变参数x代表的最后一个参数表示method 的最后一个参数,method的最后一个参数y不是可变参数x所代表的参数之一 */
java1.fun(1,2,3,4,5,6,7,8,9);
public static int fun(int ...x){
for(int k:x){
System.out.println("result="+k);
}
return 0;
}

对象的组合

  组合和复用

          组合:一个类中包含另一个类;

          (1):通过组合对象来复用方法也称为“黑盒”复用,因为当前对象只能委托所包含的对象调用其方法,这样一来,当前对象所包含的对象的方法的细节(算法的              细节)是一无所知的

          (2):当前对象随时可以更换所包含的对象,即对象所包含的对象属于弱耦合关系

  类的关联关系和依赖关系的UML图

实例成员变量与类成员

  实例成员变量和类变量的声明

class  Dog{
  float x; //实例变量(属于对象)
  static int y; //类变量(属于类)
}

  实例成员变量和类变量的区别

1.不同对象的实例变量互不相同
2.所有对象共享类变量
3.通过类名直接访问类变量/方法
当java程序执行时,类的字节码文件被加载到内存,如果改类没有创建对象,类中的实例变量不会被分配内存,但是,类的类变量,在该类被加载到内存时,就分配相应的内存空间。

类的变量的内存空间直到程序退出运行才释放占有的内存空间!

  实例方法和类方法的定义

class A{

int a;
float max(float x,float y){//实例方法
}
static float jerry(){//类方法
}
static void speak(String s){//类方法
}
}

  实例方法和类方法的区别

当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有创建该类的对象之后,类中的实例方法才分配入口地址,从而实例方法可以被创建的任何对象调用执行需要注意的是,
当我们创建第一个对象时候,类的实例方法就分配了入口地址,当再创建对象时,不在分配入口地址。也就是说方法的入口被所有的对象共享,当所有的对象都不存在的时候,方法的入口地址才被取消! 1.也可以通过类名直接调用类方法 设计类方法的原则:
  1.对于static方法,不必创建对象就可以用类名直接调用他(创建对象会导致类中的实例变量被分配内存空间),如果一个方法不需要操作类中的任何实例变量,就可以满足程序的需要,则可以设计为static方法

方法重载

  方法重载的语法规则

**参数的个数不同
**参数个数相同,但是参数列表中的某个参数的类型不同
class A{

float fun(int a){
}
float fun(int a,int b){
}
float fun(int a,float b){
}
}

  避免重载出现歧义

package chapter_4;

/**
* @author Mikey
* @date 2018/10/1 16:47
*/
public class Dog {
static void cry(double m,int n){
System.out.println("小狗");
}
static void cry(int n,double m){
System.out.println("小猫");
}
public static void main(String[] args){ Dog.cry(10.0,10);
Dog.cry(10,10.0);
Dog.cry(10,10);//出现歧义
}
}

this关键字

  在构造方法中使用this

this  代表当前对象

  在实例方法中使用this

this.成员变量
this.成员方法 class A{
int x;
static int y;
void f(){
this.x=100;
A.y=10;
}
一个实例方法调用另一个方法时可以省略方法名字前的this.或者 类名
例如 class B{
void f(){
g();
h();
} void g(){
System.out.println("g");
}
void h(){
System.out.println("h");
} }
//注意:this不能出现在类方法中,这是因为类方法可以通过类名直接调用,这时可能还没有任何对象的创建诞生

  包语句

package  包名
package  包名.包名.包名

  有包名的类的存储目录

package   tom.jiafei
javac   tom\jiafei\源文件

  运行有包名的主类

java tom.jiafei.主类名
java语言不允许用户程序使用java作为包名的一部分,例如java.bird是非法的包名(发生运行异常)

import语句

  引入类库中 的类

import java.util.*;//导入java.util包下的所有类
//如果不想引入包下的类,则直接带上包名使用
java.util.Date date=new java.util.Date();

  引入自定义包中的类

import 包名.*;//导入该包下的所有类

.*   代表所有的类
.; 代表加载应用程序当前目录下的无名包类

访问权限

  何谓访问权限

所谓的访问权限,是指对象是否通过 “.” 运算符操作自己的变量/方法

  私有变量和私有方法

//使用private修饰的变量/方法
class Tom{
private float weight;
priavte float fun(float a,float b){
return a+b;
}
}

  共有变量和共有方法

//使用public修饰的变量/方法
class Tom{
publicfloat weight;
publicfloat fun(float a,float b){
return a+b;
}
}

  友好变量和友好方法

/*定义
*不用private public protected 修饰的成员变量/方法
*
*/
class Tom{
float weight;
float f(float a,float b){
return a+b;
}
}

  受保护的成员变量和方法

class Tom{
protected float weight;
protected float f(float a,float b){
return a+b;
}
}

  public类与友好类:注意java中只有这两种来修饰类

//友好类
class A{}
//公共类
public class A{}

基本类型的类封装

  以下的对象带参构造方法都可以将基本数据类型封装成对象

    Double和Float

    Byte  Short  Integer   Long  类

    Character类

对象数组

格式1:类名[ ]  对象数组名=new  类名[大小]

jre拓展与jar文件

//jre  java  runtime  environment
//jar 将java类打包为jar格式文件,放入拓展中,程序就可以直接import来使用了

文档生成器

/*
*使用JDK 提供的javadoc.exe可以制作源文件类结构的HTML格式文档
*/ javadoc Example.java //-d 来指定目录 javadoc -d F:\mikey\java Example.java

小结:

Java基础知识笔记第四章:类和对象的更多相关文章

  1. Java基础知识笔记第六章:接口

    接口 /* 使用关键字interface来定义一个接口.接口的定义和类的定义很相似,分为接口声明和接口体 */ interface Printable{ final int max=100; void ...

  2. Java基础知识笔记第五章:子类与继承

    子类与父类 子类 class 子类名 extends 父类名{ ....... } 类的树形结构 子类的继承性 子类和父类在同一包中的继承性 子类继承了父类不是private的成员属性和成员方法   ...

  3. Java基础知识笔记第七章:内部类和异常类

    内部类 /* *Java支持在一个类中定义另一个类,这样的类称为内部类,而包含内部类的类称为内部类的外嵌类 */ 重要关系: /* *1.内部类的外嵌类在内部类中仍然有效,内部类的方法也可以外嵌类的方 ...

  4. Java基础知识笔记(四:多线程基础及生命周期)

    一.多线程基础 编写线程程序主要是构造线程类.构造线程类的方式主要有两种,一种是通过构造类java.lang.Thread的子类,另一种是通过构造方法实现接口java.lang.Runnable的类. ...

  5. Java基础知识笔记第三章:运算符表达式语句

    算术运算符与表达式 操作符 描述 例子 + 加法 - 相加运算符两侧的值 A + B 等于 30 - 减法 - 左操作数减去右操作数 A – B 等于 -10 * 乘法 - 相乘操作符两侧的值 A * ...

  6. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  7. java并发编程笔记(四)——安全发布对象

    java并发编程笔记(四)--安全发布对象 发布对象 使一个对象能够被当前范围之外的代码所使用 对象逸出 一种错误的发布.当一个对象还没构造完成时,就使它被其他线程所见 不安全的发布对象 某一个类的构 ...

  8. JAVA基础语法:函数(方法)、类和对象(转载)

    4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...

  9. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

随机推荐

  1. 如何在项目中新建.gitignore文件

    1. 在需要创建 .gitignore 文件的文件夹, 右键选择 Git Bash 进入命令行,进入项目所在目录. 2. 输入 touch .gitignore 在文件夹就生成了一个“.gitigno ...

  2. 推荐一个手机端切换地址gps的app

    在写脚本的时候遇到的 客户提供了这个app 免费 自身可以防检测 苹果和安卓都可以使用   官网 http://www.daniu.net/   搜索 大牛 或者danniu即可

  3. Kali国内源更新sources.list

    Kali国内源更新sources.list   更新源,个人推荐中科大leafpad /etc/apt/sources.list   #中科大   deb http://mirrors.ustc.ed ...

  4. 推荐算法之---FM算法;

    一,FM算法: 1,逻辑回归上面进行了交叉特征.算法复杂度优化从O(n^3)->O(k*n^2)->O(k*n). 2,本质:每个特征都有一个k维的向量,代表的是每个特征都有k个不可告人的 ...

  5. Spring bean的bean的三种实例化方式

     Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean ...

  6. 《TCP/IP网络编程》读书笔记

    1.Windows 下的 socket 程序和 Linux 思路相同,但细节有所差别(1) Windows 下的 socket 程序依赖 Winsock.dll 或 ws2_32.dll,必须提前加载 ...

  7. java redis 实现用户签到功能(很普通简单的签到功能)

    业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到redis 缓存里面,然后每天凌晨时再清除缓存,大概简单思想是这样的 直接看代码吧如下 @Transactional @ ...

  8. jsp用equals判断两个字符串变量是否相等

    使用即可: s1.equals(s2) 如果使用场景: if(s1==s2){} 这样使用可能会出现判断无效的情况. 使用if(s1.equals(s2)){}就可以了.

  9. 【MYSQL建库和建表】MYSQL建库和建表

    1.Navicat创建Mysql数据库 2.创建创建用户表和索引 CREATE TABLE `t_user` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT '主键' ...

  10. java并发基础知识

    这几天全国都是关键时候,放假了,还是要学习啊!很久没有写博客了,最近看了一本书,有关于java并发编程的,书名叫做“java并发编程之美”,讲的很有意思,这里就做一个笔记吧! 有需要openjdk8源 ...