第一周博客

一.注释

1.单行注释:使用“//”开头,“//”后面的单行内容均为注释。

2.多行注释:以“/*”开头,以“*/”结尾,在“/*”和“*/”之间的内容均为注释。多行注释不能嵌套使用!!!

3.文档注释:以“/**”开头,以“**/”结尾。

二.标识符规则

1.标识符必须以字母下划线_、美元符号$开头。

2..标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。

3.Java标识符大小写敏感,且长度无限制。

4.标识符不可以是Java的关键字。

5.标识符的使用规范
表示类名的标识符:每个单词的首字母大写,如Man,GoodMan

表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为“驼峰原则”,如eat(),eatFood()

三.Java的关键保留字


 四.变量

1.·变量的声明格式为:
 type va初始rName[=value][,varName[=value]...];

 //[]中的内容为可选项,即可有可无

数据类型 变量名 [=值][,变量名 [=初始值].];

2.每个变量都有类型,类型可以是基本类型,也可以是引用类型。

3.变量名必须是合法的标识符

4.变量声明是一条完整的语句,因此每一个声明都必须以分号结束

5.局部变量(local variable):方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。

6.成员变量(也叫实例变量 member variable):方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。
表2-3 实例变量的默认初始值
数据类型          实始值
int                        0
double                0.0
char                ' \u0000'
boolean             false

7.静态变量(类变量 static variable)
使用static定义。从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值。

五.常量

1.常量通常指的是一个固定的值,例如:1、2、3、’a’、’b’、true、false、”helloWorld
”等。在Java语言中,主要是利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。

2.变量和常量命名规范
类成员变量:首字母小写和驼峰原则:monthSalary
局部变量:首字母小写和驼峰原则
常量:大写字母和下划线:MAXgVALUE
类名:首字母大写和驼峰原则:Man,GoodMan
方法名:首字母小写和驼峰原则:run(),runRun)

六.基本数据类型

1.数值型 - byte、 short、int、long、float、double 

字符型(文本型)-char

布尔型-boolean

2.byte——1字节

short——2字节

int——4字节

long——8字节

3.十进制整数,如:99,-500,0

八进制整数,要求以0开头,如:015

十六进制数,要求Ox或OX开头,如:Ox15

二进制数,要求0b或0B开头,如:0b01110011

4.float类型的数值有一个后缀F或者f,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或者d,以明确其为double类型。

5.字符型:'A'表示一个字符,"A"表示一个字符串。

6.boolean类型:boolean类型有两个常量值,true和false 在内存中占一位(不是一个字节),不可以使用0或非0的整数替代true和false,这点和C语言不同。boolean类型用来判断逻辑条件,一般用于程序充程控制。

七.算术运算符·

1.

 2.如果两个操作数有一个为Long,则结果也为long。
没有long时,结果为int。即使操作数全为short,byte,结果也是int。
如果两个操作数有一个为double,则结果为double。
只有两个操作数都是float,则结果才为float。

3.取模运算:其操作数可以为浮点数,一般使用整数,结果是“余数” ,“余数”符号和左边操作数相同,如:7%3=1,-7%3=-1,7%-3=1。I
算术运算符中++,--属于一元运算符,该类运算符只需要一个操作数。

八.赋值运算符

 九.关系运算符

1.

2. =是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。
    ==、!=是所有(基本和引用)数据类型都可以使用
    >、>=、<、<=仅针对数值类型( byte/short/int/long,float/double。以及char)

十.逻辑运算符

 十一.位运算符

1.

十二.运算符

1.字符串连接符:“+”运算符两侧的操作数中只要有一个是字符串string类型,系统就会自动将另一个操作数转化为字符串然后进行连接。

2.条件运算符:x?y:z

其中x为boolean类型表达式,先计算x的值,若为true,则整个运算的结果为表达式y的值,否则整个运算结果为表达式z的值

3.运算符优先级

十三.类型转换

1. 自动类型转换

备注:实线代表无数据丢失的自动类型转换,虚线表示在转换时可能有精度的缺失

可以将整型常量直接赋值给byte、short、char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。

2.强制类型转换

十四.语句

1.if单选择结构语句

语法:if(布尔表达式){

语句块

}

2.if_else双选择结构语句

语法:if(布尔表达式){

语句块1;

}else{

语句块2;

}

3.if_else if_else多选择结构语句

语法:if(布尔表达式1){

语句块1;

}else if(布尔表达式2){

语句块2;

}……

else if(布尔表达式n){

语句块n;

}else {

语句块n+1;

}

4.switch多选择结构

 5.while循环

语法:while(布尔表达式){

循环体;

}

6.do while 循环

语法:do{

循环体;

}while(布尔表达式);

7.for循环

8.嵌套循环

9.break语句

10.continue语句

十五.方法的定义

1.方法的声明格式:

         [修饰符1  修饰符2  …..] 返回值类型  方法名( 形式参数列表 ){

                   Java 语句;… … …

}

例如: public static int add(int a,int b){

  int sum=a+b;

  return sum;

}
2.形式参数:在方法被调用时用于接收外界输入的数据。
   实参:调用方法时实际传给方法的数据。
   返回值:方法在执行完毕后返回给调用它的环境的数据。
   返回值类型:事先约定的返回值的数据类型,无返回值,必须给出返回类型viod。

3.Java语言中使用下述形式调用方法:对象名.方法名(实参列表)

 例如上述方法调用为: int sum=add(5,3);

4..实参的数目、数据类型和次序必须和所调用方法声明的形式列表匹配。

十六.方法的重载

1.方法的重载的规则:
   方法名称必须相同
   参数列表必须不同(个数不同、或类型不同、或参数多类型的排列顺序不同)三者至少一个不同
   方法的返回类型可以相同也可以不相同
   仅仅返回类型不同不足以成为方法的重载

2.构成方法重载的条件:

不同的含义:形参类型,形参个数,形参顺序不同

只有返回值不同不构成方法的重载

例:int a(String str){}与void a(String str){}

3.不构成方法重载:

只有形参的名称不同,不构成方法的重载

例:int a(String str){}与int a(String str){}

十七.递归与迭代

1.递归是重复调用函数自身实现循环,迭代是函数内某段代码实现循环。

2.迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。递归循环中,遇到满足终止条件的情况时逐层返回来结束。迭代则使用计数器结束循环。

十八.面向过程和面向对象

1.区别:可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。

如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

十九.对象和类

1.什么是对象:

(1)对象是一种具体的概念。
(2)对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。

2.类与对象的关系就如模具和铸件的关系,类的实例化的结果就是对象,而对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。

3.典型类的写法与调用:

①class A{…}
②public class B{…}

类的构成:属性+方法+主方法

注意,定义类时,类名后面不需加圆括号;
而定义方法需要在方法名后加上括号

当一个程序中同时出现以上两个类时,需要将class定义的类放在public class定义的类上面

且类中定义的方法,需要包含在类内部,主方法也需要包含在类内部

二十.内存分析

1.堆区:
(1).存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
(2).jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身.
(3).一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。

2.栈区:
(1).每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
(2).每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
(3).栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
(4).由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.

3.静态区/方法区:
(1).方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
(2).方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

(3).全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

4.  栈(stack):(1).为每个方法分配一个栈帧,栈帧之间不共享 
                      (2).存放局部变量:基本数据类型和对象的引用 
    堆(head):(1).存放对象 
                      (2).被所有线程共享 
    方法区(methodArea):(1).被所有线程共享 
                                       (2).存放整个程序中永远唯一的元素:class(字节码指令),static(静态变量)和字符串常量

二十一.构造方法

构造方法的重载与方法的重载相同,都是方法名相同而方法参数顺序,类型或个数不同。多个对象的初始化需要创建多个构造方法。方法名相同而表示含义不同,这叫做构造方法的重载。

二十二.垃圾回收

1.引用计数算法

对每一个对象保存一个整型的引用计数器属性,用于记录对象被引用的情况。

优点:实现简单,垃圾对象便于辨识;判定效率高,回收没有延迟性。

缺点:增加了存储空间的开销。增加了时间开销。无法处理循环引用的情况。

2.可达性分析算法(根搜索算法、追踪性垃圾收集)

通过一系列的"GC roots"对象作为起点搜索。可以有效解决在引用计数算法中循环引用的问题,防止内存泄漏的发生。

“GC Roots”根集合就是一组必须活跃的引用

3.通用分代垃圾回收

(1).三种状态

A.年轻态:所有的新生成的对象都放在Enen区中,年轻代的目标是尽可能快的收集那些生命周期短的对象,对应着Minor GC。

   B.年老代:在年轻态中存在了15次垃圾回收后还存在的对象(生命周期较长)。当年老代的对象越来越多,我们就需要启动Major GC和Full GC(全量回收)全面清理年轻代和年老态对象。

   C.持久态:用于存放静态文件,如Java类,方法等,持久态对象对垃圾回收午显著影响。

 二十三.this的本质

就是一个真实的对象。比如我们都是“人”,而你和我其实就是“人”类的实例了。实例化就是创建对象的过程,使用new关键词类创建。
创建一个对象有如下四步:
1.分配对象空间,并将对象的成员变量初始化为0或空;
2.执行属性值的显示初始化;
3.执行构造方法;
4.返回对象的地址给相关的变量。

this的本质就是“创建好的对象的地址”;由于在构造方法调用前,对象已经创建,因此,在构造方法中也可以使用this代表“当前对象"。

二十四.static关键字

1.(1).static修饰的变量和方法是属于类的。

(2).static修饰的变量和对象,方法存储在方法区的静态常量池中;是共享的;

(3).可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法

(4).static修饰的代码块在main方法前执行,目的是修饰main方法

(5).static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问

(6).static方法是没有this的方法,在static方法内部不能调用非静态方法,反过来是可以的

二十五.静态初始化块

1. 上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止。

2. 构造方法执行顺序和上面顺序一样!!

3.静态初始化块,用于类的初始化操作,在静态初始化块中不能直接访问非static成员。

二十六.Java的机制

1.Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。

2.通过package实现对类的管理,package的使用有两个要点:
通常是类的第一句非注释性语句。
包名:域名倒着写,再加上模块名,便于内部管理类。

3.package的命名

com.sun.test
com.oracle.test
com.sxt.wang.test
com.sxt.wang.view
com.sxt.wang.view.model

注意问题:
写项目时都要加包,不要使用默认包
com.wang和com.wang.car,两个包没有包含关系,是两个完全独立的逻辑结构。

二十七.import详解

如果在当前A包中,想使用B包中的类,则可以使用import 关键字进行导入。

格式:import  包名.类名  //  eg:import  java.util.Arrays;

如果想调用该类的方法使用:Arrays.sort();调用

注意:

= 对于java.lang 中的类系统会自动导入。eg: System  /  String

但是对于java.lang包的子包系统不会加载必须写出来。eg:java.lang.reflect.*;//lang 包下的子包中的类

=  如果需要使用一个包中的多个类,可以用  import  java.util.* ;  表示只加载在当前类中使用到的工具类。

二十八.intanceof的使用

1.java 中的instanceof是一个运算符,而且是二目运算符,即有两个操作数。该运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
 2.用法:
result = object instanceof class
3.参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

public class C extends B {

    private void print(Object a) {
        System.out.println(a+" instanceof");
    }

    public void convert(String b) {

        if (b instanceof Object) {
            this.print(b);
        }
    }

}

二十九.方法的重写

1.重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变。即外壳不变,核心重写。重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。

2.方法重写的规则
(1).参数列表必须完全与被重写方法的相同;
(2).返回类型必须完全与被重写方法的返回类型相同;
(3).访问权限不能比父类中被重写的方法的访问权限更高。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。

三十.object类的toString方法
1、直接打印对象的地址值没有意义,需要重写Object类中的toString方法打印对象的属性。
2、看一个类是否重写了tostring()方法,直接打印这个类的对象即可,如果没有重写toString()方法,那么打印的是对象的地址值。

三十一.equals方法的重写

1.Object类是所有类的父类。换句话说,任何类都隐含地继承了该方法。判断两个对象的内容是否相同,必须使用equals()方法,对于没有重写该方法的类,需要重写该方法

 2.对象内容的比较,需要使用equals()方法,若是对于已经重写该方法的类,例如String类,就无需再重写;若是没有重写,例如自定义的User类,就需要重写。

 3.Java语言中的“==”对于基本数据类型就是比较其值,而对于对象就是比较对象的引用。

三十二.super的用法

1.super能出现在实例方法和构造方法中。

2.super的语法是“super.”和“super()”。

3. super不能出现在静态方法中。

4. super大部分情况下是可以省略的。

5.super和this区别是:this可以看做一个引用变量,保存了该对象的地址,是当前对象整体,而super代表的是父类型特征,是子类局部的一些东西,这些继承过来的东西已经在子类里面了,你可以输出整体this,但不能输出父类型特征super。因为super指向的东西不是一个整体,没法打印输出。

6.this和super都只能在对象内部使用。
this代表当前对象本身,super代表当前对象的父类型特征。

7.总结:“this.”是一个实例对象内部为了区分实例变量和局部变量。
而“super.”是一个实例对象为了区分是子类的成员还是父类的成员。
父类有,子类也有,子类想访问父类的,“super.”不能省略。**

8.super()只能出现在构造方法的第一行,通过当前的构造方法去调用“父类”中的对应的构造方法,目的是:创建子类对象时,先初始化父类型特征

三十三.封装

1.public: 可以被同项目中的所有类访问(所有可访问)
protected:同包中的所有类和不同包的子类可以访问,其他情况不可用(同包和不同包子类可访问)
(default):同包中的所有类可以访问(同包可访问)
private:只允许在本类中进行访问,其他情况不可用(本类可访问)

2.封装的使用细节:

1).一般使用private访问权限
2).为了让其他的类可以使用这些属性提供相应的get和set方法

public class Data {
 
	private int id;
	private String value;
 
	public int getId() {
		return id;
	}
 
	public void setId(int id) {
		this.id = id;
	}
 
	public String getValue() {
		return value;
	}
 
	public void setValue(String value) {
		this.value = value;
	}
 
}

三十四.多态

1.多态的三个必要条件

1).需要有继承关系的存在

2).需要有方法的重写

3).需要有父类的引用指向子类对象

public class TestAnimal {
    public static void main(String[] args) {
        Animal a = new Animal();
        animalCry(a);
 
        Dog d = new Dog();
        animalCry(d);
 
        Cat t = new Cat();
        animalCry(t);
    }
 
    //多态的关键,通过父类的引用调用子类重写的方法。
    static void animalCry(Animal a) {
        a.shout();
    }
}
class Animal{
    public void shout() {
        System.out.println("animal 叫了一声");
    }
}
 
class Dog extends Animal{
    public void shout() {
        System.out.println("dog 汪汪汪!");
    }
}
 
class Cat extends Animal{
    public void shout() {
        System.out.println("cat 喵喵喵!");
    }
}

2.对象的转型

package 对象的上转型对象;

public class Test {
	public static void main(String[] args) {
		Anthropoid monkey;
	    People geng=new People();
	    monkey=geng;//monkey是People对象geng的上转型对象
	    monkey.crySpeck("I love this game");
	    geng.crySpeck("I love this game");
	    People people=(People)monkey;//把上转型对象强制转化为子类的对象 
	    people.computer(10, 10);
	}
}

三十五.数组

1.数组的三种初始化方式

1).静态初始化:除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。

动态初始化:数组定义与为数组元素分配空间并赋值的操作分开进行

默认初始化:数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化(即使不给赋初值,也会被程序赋予默认值)。

2.数组的遍历

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值