java基础(二)

1.     面向对象

万事万物皆对象

面向对象思想

面向对象是基于面向过程的编程思想。

面向过程:强调的是每一个功能的步骤

面向对象:强调的是对象,然后由对象去调用功能

面向对象的思想特点

A:是一种更符合我们思想习惯的思想

B:可以将复杂的事情简单化

C:将我们从执行者变成了指挥者

面向对象特征:

封装(encapsulation)

继承(inheritance)

多态(polymorphism)

Java程序的开发,设计和特征

A:开发:就是不断的创建对象,通过对象调用功能

B:设计:就是管理和维护对象间的关系

C:特征

a:封装

b:继承

c:多态

1.1     类与对象的关系:

类:是一组相关的属性和行为的集合

对象:是该类事物的具体体现

类:可以理解为构造对象的一个蓝图或者模版,是抽象的概念

对象:是以类为模型创建的具体实例,是对类的一种具体化。

Java中用class描述事物也是如此

成员变量         就是事物的属性,在类中,方法外。

成员方法         就是事物的行为

定义类其实就是定义类的成员(成员变量和成员方法)

  • 一个对象的内存图

  • 三个对象的内存图

java内存结构图:

栈:存放对象的引用;局部变量,所有的方法执行都在栈内存。

堆栈:存储对象以及对象中的成员变量和其变量值,对象成员方法的引用。

方法区:存放对象.class文件以及对象中的成员变量和成员方法

1.2     形式参数

Java中的参数传递问题

Java中只有值传递。

基本类型:形式参数的改变不影响实际参数(因为方法调用结束,局部变量在栈内存中随着方法调用完毕而消失)

                   引用类型:形式参数的改变直接影响实际参数(因为改变的是堆内存中的值)

1.3     成员变量和局部变量

1,  在类中的位置不同:

  1. a)        成员变量:类中方法外
  2. b)        局部变量:方法内或方法声明上

2,  在内存中的位置不同

  1. a)        成员变量:堆内存
  2. b)        局部变量:栈内存

3,  生命周期不同

  1. a)        成员变量:随着对象的创建而存在,随着对象的消失而消失
  2. b)        局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

4,  初始化值不同

  1. a)        成员变量:有默认的初始化值
  2. b)        局部变量:没有默认的初始化值,必须先定义赋值,才能使用
  3. 1.4     匿名对象

匿名对象:就是没有名字的对象。

是对象的一种简化表示形式

匿名对象的两种使用情况

a,对象调用方法仅仅一次的时候

b,作为实际参数传递

1.5     封装

封装概述:

1,  隐藏实现细节,提供公共的访问方式;

2,  好处

  1. a)        隐藏实现细节,提供公共的访问方式;
  2. b)        提高代码的复用性
  3. c)        提高代码的安全性

3,  设计原则:

  1. a)        将不需要对外提供的内容和属性都隐藏起来,提供公共的方法对其访问

4,private是封装的一种体现。

封装:类,方法,private修饰成员变量

1.5.1       关键字
1.5.1.1 private关键字:

private关键字:

是一个权限修饰符。

可以修饰成员(成员变量和成员方法)

被private修饰的成员只在本类中才能访问。

private最常见的应用:

把成员变量用private修饰

提供对应的getXxx()/setXxx()方法

1.5.1.2 this关键字:

this:代表所在类的对象引用;

1.5.1.3 static关键字
  • static关键字:

a,可以修饰成员变量和成员方法;

b,static关键字特点:

随着类的加载而加载;

优先于对象存在;

被类的所有对象共享(这也是我们判断是否使用静态关键字的条件);

可以通过类名调用。

c,注意事项:在静态方法中是没有this关键字的;静态方法只能访问静态的成员变量和静态的成员方法

l 静态的内容存在于方法区的静态区

  • 静态变量和成员变量的区别

a,所属不同:

静态变量:属于类,类变量

成员变量:属于对象,对象变量,实例变量

b,内存位置不同

静态变量:静态方法区

成员变量:堆内存

c,生命周期不同

静态变量:随着类的加载而加载,随着类的消失而消失

成员变量:随着对象的创建而存在,随着对象的消失而销售

d,调用不同

静态变量:可以通过类名调用,也可以通过对象名调用

成员变量:只能通过对象名调用

  • main方法是静态的

public:权限最大

static:不用创建对象就可以调用

void:返回值给jvm,没有意义

main:就是一个常见的名称

String[] args:可以接收数据,提供程序的灵活性

1.5.2       构造方法

构造方法

(1)作用:用于对对象的数据进行初始化

(2)格式:

A:方法名和类名相同

B:没有返回值类型,连void都不能有

C:没有具体的返回值

问:构造方法中可不可以有return语句呢?

可以。而是我们写成这个样子就OK了:return;

其实,在任何的void类型的方法的最后你都可以写上:return;

(3)构造方法的注意事项

A:如果我们没写构造方法,系统将提供一个默认的无参构造方法

B:如果我们给出了构造方法,系统将不再提供默认构造方法

如果这个时候,我们要使用无参构造方法,就必须自己给出。

推荐:永远手动自己给出无参构造方法。

C:构造方法可以重载

1.5.3       类

一个基本类的标准代码写法

成员变量

构造方法

无参构造方法

带参构造方法

成员方法

getXxx()

setXxx()

  • 给成员变量赋值的方式

A:setXxx()

B:带参构造方法

1.5.4       类的初始化过程

l  Student s = new Student();在内存中做了哪些事情?

加载Student.class文件进内存

在栈内存为s开辟空间

在堆内存为学生对象开辟空间

对学生对象的成员变量进行默认初始化

对学生对象的成员变量进行显示初始化

通过构造方法对学生对象的成员变量赋值

学生对象初始化完毕,把对象地址赋值给s变量

1.5.5       代码块

在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。

  • 局部代码块

在方法中出现;限定变量生命周期,及早释放,提高内存利用率

  • 构造代码块

在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行

  • 静态代码块

在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。

问:静态代码块,构造代码块,构造方法的顺序问题?

静态代码块 > 构造代码块 > 构造方法

2.     异常

数组索引越界

ArrayIndexOutOfBoundsException

访问到了数组中的不存在的索引时发生。

空指针异常

NullPointerException

数组引用没有指向实体,却在操作实体中的元素时。

3.     面试题

  • short s = 1;

s= s + 1;

shorts = 1;

s+= 1;

请问上面的代码哪个有问题?s=s+1有问题。原因参见2.5.6默认转换和2.5.7

  • byte b = (byte)130;运行结果:-126。byte范围是-128~127,超出范围,会以int类型存储,转换为byte类型,详见:2.5.7
  • byte b1=3,b2=4,b;

b=b1+b2;

b=3+4;

哪句是编译失败的呢?为什么呢?

答:b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。

b=b1+b2不可以,是因为b1和b2是变量,因为变量的值会变化,不确定具体的值,所以默认使用int类型进行存储。int类型转换为byte类型是有问题的。答案见下2.5.7

  • switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?

可以,不可以,JDK7以后可以

  • 成员变量和名称可以不可和局部变量一样呢?

可以,但是使用的时候要注意,先找小范围,再找大范围。

  • switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?

可以,不可以,JDK7以后可以

时间: 2024-08-06 15:17:59

java基础(二)的相关文章

Java 基础 (二)

接上 Java 基础(一) 大纲:(1)类的高级特性 (2)集合类 (3)异常处理 (4)输入/输出 (5)Swing程序设计 抽象类:只申明方法的存在,而不去实现它的类:抽象类不能被实例化,也就是说不能创建其对象; 语法格式如下: abstract class 类名 { 类体 } 在抽象类中创建,没有实际意义,必须在子类中重写的方法为抽象方法:抽象方法只有方法的申明,没有方法的实现: 基本定义格式如下: abstract <返回值> 方法名(参数列表) PS:抽象方法不能用Private和S

6、JAVA基础-二维数组 及 面向对象理解

1:二维数组(理解) (1)元素是一维数组的数组. (2)格式: A:数据类型[][] 数组名 = new 数据类型[m][n]; B:数据类型[][] 数组名 = new 数据类型[m][]; C:数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}}; D:数据类型[][] 数组名 = {{...},{...},{...}}; (3)案例(掌握): A:二维数组的遍历 B:二维数组的求和 C:杨辉三角形 2:两个思考题(理解) (1)Java中的参数传递

java基础二(阅读Head First Java记录)

写在前面的话 本部分是在语法基础上的一些内容,比如内部java函数库,继承多态等 “与”和“或”运算符 1.短运算符(&&,||) &&与,必须表达式两边都为true表达式才会为true,如果左侧为false了,就不会去计算右方的算式直接返回false,可以用&&来避免操作内容为null指针变量的情况if(refVar!=null&&refVar.isValidType()){} ||同理,如果左侧已经返回true了,不会再去计算右侧就直接返

Java基础二十二

1 多线程的概述 1.1 进程 就是正在运行的程序.是系统进行资源分配和调度的独立单位.每一个进程都有其自己的内存空间和系统资源. 1.2 多进程的意义? 单进程的计算机只能做一件事情,而我们现在的计算机可以做多件事情.例如:一边玩游戏,一边听音乐. 现在的计算机都支持多进程的,就可以一个时间段内执行多个任务,并且可以提高CPU的使用率. 1.3 线程 在一个进程内又可以执行多个任务,而这每一个任务我们就可以看成是一个线程. 线程是进程的执行单元(执行路径). 单线程:如果程序有一条执行路径.

Java基础(二)继承剖析

继承剖析 1 若是要直接调用父类的构造方法,不调用子类的方法则需要使用的是super()关键字 Publicclass Child extends Parent {          Public Child()          {                    Super(1);//此方法是显示的调用父类的方法,不会再采用默认的方法机制                    System.out.println(“child!”); }   Public static void ma

java基础二 &lt;流程控制语句, 方法,数组,java内存结构&gt; 未完待续...

话不多说,直接上干货... 一:流程控制语句 break :  结束当前循环 continue:  结束本次循环,继续下次循环 return:  结束方法 二: 方法 1.方法的特点: 定义在类中的,有特定功能的函数. 方法与方法之间是平级的,不能在方法中定义方法.方法只能够调用方法. 2.方法的重载: 在同一类中,方法名相同,参数列表不同(个数不同,对应的类型不同). 与返回值类型无关. 对应的类型不同的话,与顺序有关系 与形式参数的变量名无关 3.方法的重写: 子类可继承父类中的方法,而不需

重学JAVA基础(二):Java反射

看一下百度的解释: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息    以及动态调用对象的方法的功能称为java语言的反射机制. 先看一下一个例子: 这是最简单的反射使用方法,通过反射来调用类的方法. 下面通过一个需求来做反射实验:有3种人类(黄,白,黑),分别继承于Human类,都有人类的共同操作Behaviour /** * 行为,区别于动物 * @author tomsnail *

Java基础(二)-static关键字分析

static关键字是我们在编程中经常会使用到的,但有些可能只知其然而不知其所以然.下面介绍static关键字的作用再通过例子结合说明. static关键字共有五种作用(先说明static所修饰的不会改变其(private.protected.default和public)作用域的范围): 修饰成员变量(非局部变量) 修饰成员方法 修饰代码块 修饰内部类 静态导包 怎么会有五种呢,大部分初学者对前面两种或者加上第三种还是很熟悉的,第四种情况可能一开始的人就比较少知道了,第五种就更少人知道了.下面一

Java基础二十

1 转换流 1.1 转换流出现的原因 由于字节流操作中文的时候不是很方便,所以,Java就提供了转换流. 字符流=字节流+编码表. 1.2 String类的编码和解码功能 方法:通过指定的编码,将二进制的数据转换为字符串,即解码 String(byte[] bytes, Charset charset) 方法:通过制定的编码,将字符串转换为二进制的数据,即编码 public byte[] getBytes(Charset charset) 示例: package com.xuweiwei; im

java基础 ---- 二维数组

--------   多维数组 之二维数组 三维以上的就很少使用了主要使用的就是二维数组,从j内存的分配原理角度来讲只有一位数组 -------  二维数组 一维数组的就是用下标标识数组元素的位置 二维数组实际上就是一个一维数组,他的每一个元素又是一个一维数组 ---  存储分布 实现方式 原文地址:https://www.cnblogs.com/obge/p/10741016.html