java基础知识总结(1)

定义类:

访问修饰符 class 类名{ }

访问修饰符如:public 、priate是可选的

class是声明类的关键字

按照命名规范,类名首字母大写

例:创建“人”类,关键代码:

public class Person{ }

**********************************************************

定义属性:

访问修饰符 数据类型 属性名;

访问修饰符士可选的

除了访问修饰符之外,其他的语法和声明变量是一致的

例:创建“人”类,名为“人”类添加相应属性,关键代码:

public class Person{

public String name;

public String gender;

public int age;

}

**********************************************************

定义方法:

访问修饰符 返回类型 方法名称(参数类型 参数名1,参数类型 参数名2,……){ }

访问修饰符是可选的

返回类型可以是void,在定义方法时,返回类型为void时,表明没有返回值,方法体中不必使用“return”关键字返回具体数据,但是可以使用“return”关键字退出方法

返回类型不为“void”,那么在方法体中一定要使用“return”关键字返回对应类型的结果,否则程序会有编译错误

小括号中的“参数类型 参数名1,参数类型 参数名2,……”称为参数列表

当需要在方法执行的时候为方法传递参数时才需要参数列表,如果不需要传递参数时就可以省略,不过小括号不可以省略,传递多个参数时,以半角的括号进行分隔

例:在“人”类中定义方法,描述人工作的行为,关键代码:

public class Person{

public String name;

public String gender;

public int age;

public void work( ){

System.out.println(this.name+"的工作理念:为梦想而努力奋斗);

}

}

**********************************************************

创建和使用对象:

1、创建对象

类名 对象名 = new 类名();

new 是关键字

左边的类名为对象的数据类型

右边的类名()称为类的构造方法

例:创建Person类的对象,关键代码:

Person lilei = new Person( );

2、使用对象

对象名 . 属性             //引用对象的属性

对象名 . 方法名         //引用对象的方法

例:对象属性赋值并调用方法

public static void main(String[] args){

Person lilei = new Person( );

lilei.name = "李雷";

lilei.gender = "男";

lilei.age = 22;

lilei.work( );

}

**********************************************************

成员方法:

1、带参数的方法

创建work()方法时定义的参数叫做形式参数,简称形参。调用方法时传入的参数叫做实际参数,简称实参。

2、方法重载:

方法名相同,参数列表不同,就形成了方法重载

特点:在同一个类中,方法名相同,参数的个数或类型不同

**********************************************************

成员变量:

1、成员变量:类中的属性,直接在类中定义的变量,定义在方法的外部。PS:成员变量可以在声明时赋初始值,如果没有赋值,java会给它一个默认值,基本数据类型的值为0,引用类型的值为null

2、局部变量:定义在方法中的变量,一般情况下,在使用前需要赋值,否则会编译出错

**********************************************************

构造方法:

主要作用是进行一些数据的初始化

访问修饰符 方法名(参数列表){方法体}

构造方法没有返回值

默认构造方法没有参数,因此参数列表可选(默认构造无参方法的快捷键:Alt+/)

构造方法的方法名与类名相同

如果写了带参的构造方法,必须要生成一个无参的构造方法

例:为Person类定义一个构造方法,关键代码:

public class Person{

public Person(){

this.name = "李雷";

}

}

在一个类中可以定义多个重载的构造方法

this关键字是对一个对象的默认引用,每个实例方法内部,都有一个this引用变量,指向调用这个方法的对象

因为this是在对象内部指代自身的引用,所以this只能调用实例变量、实例方法和构造方法。this不能调用类变量和类方法,this也不能调用局部变量。

1)使用this调用成员变量,解决成员变量和局部变量的同名冲突。

2)使用this调用成员方法

3)使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法第一条语句

例:

public Penguin(String name,String sex){

this.name = name;

this.sex = sex;

}

public Penguin(String name, int health, int love, String sex){

this(name,sex);

this.health = health;

this.love = love;

}

**********************************************************

封装的步骤:

封装:

用OOP方式完成变量的声明、赋值、使用

完成2次(声明、赋值、使用):1、封装的类 声明 赋值 使用 2、封装类里面属性的声明 赋值 使用

1、修改属性的可见性

将Person类中的属性由public修改为private即可。

例:请将Person类的属性私有化,关键代码:

public class Person{

private String name;

private String gender;

private int age;

}

2、设置setter/getter()方法

例:请为Person类中的私有属性添加setter/getter()方法,关键代码:

public class PrivatePerson{

private String name;

private String gender;

private int age;

public String getName(){

return name;

}

public void setName(String name){

this.name = name;

}

public String getGender(){

return gender;

}

public void setGender(String gender){

this.gender = gender;

}

public int getAge(){

return age;

}

public void setAge(int age){

this.age = age;

}

}

3、设置属性的存取限制

此时,属性仍然没有限制作用,需要进一步利用条件判断语句进行限制

例见myeclipse -->practise-->SetPerson

**********************************************************

定义包:

package 包名

package是关键字

报的声明必须是java源文件中的第一条非注释性语句,而且一个源文件只能有一个包声明语句,设计的包需要与文件系统结构相对应。因此,在命名包时,要遵守以下编码规范:

a、一个唯一的包名前缀通常是全部小写的ASCII字母,并且是一个顶级域名com、edu、gov、net、及org,通常使用组织的网络域名的逆序。例如,如果域名为javagroup.net,可以声明包名为“pacage net.javagroup.mypackage"

b、包名的后续部分依不同机构各自内部的规范不同而不同。这类命名规范可能以特定目录名的组成来区分部门、项目、机器或注册名,如“package net.javagroup.research.powerproject"

**********************************************************

包的使用:

包从大到小写:网址倒过来

1、声明包的含义是声明当前类所处的位置

2、导入包的含义是声明在当前类中要使用到的其他类所处的位置

//讲Person类放入pack1包中

package cn.bdqn.pack1;

public class Person{

……省略代码

}

//将PersonTest类放入pack2包中

//使用Person类时,需要使用import将其导入

package cn.bdqn.pack2;

import cn.bdqn.pack1.Person;

public class PersonTest{

public static void main(String[] atgs){

……省略代码

}

}

**********************************************************

类成员的访问修饰符:

作用域:   同一个类中   同一个包中   子类   任何地方

private     可以     不可以    不可以   不可以

默认修饰符     可以     可以    不可以   不可以

protected    可以     可以     可以     不可以

public        可以     可以     可以    可以

**********************************************************

static关键字的修饰属性:

static修饰的属性称为静态变量或者类变量,没有使用static修饰的属性称为实例变量。

例:将Person类的name、gender和age属性保留,新建一个static修饰的属性,并调用 ,关键代码:

public Person{

public String name;

public String gender;

public static int age;

public static int PERSON_LIVE;

//……省略代码

}

//以上为Person类代码,以下为调用代码

//……省略代码

Person hanbing = new Person();

hanbing.name = "韩冰";

hanbing.gender = "女";

hanbing.age = 22;

Person.PERSON_LIVE = 1;

实际开发中,static关键字修饰属性的最常用场景就是定义使用final关键字修饰的常量。使用final关键字修饰常量在整个程序运行时都不能被改变,和具体的对象没有关系,因此使用static修饰,

如“static final  int PERSON_LIVE=1"

PS:  1、常量名一般由大写字母组成

2、声明常量时一定要赋初值

**********************************************************

static关键字的修饰方法:

static修饰的方法称为静态方法或者类方法,不用static关键字修改的方法称为实例方法。

例:将Person中的showDetails()方法使用static关键字修饰,并调用 ,关键代码:

public Person{

public String name;

public String gender;

public static int age;

public static void showDetails(String name,String gender,int age){

System.out.println("姓名是:"+name+",性别为:"+gender+",年龄是:"+age);

}

}

//以上为Person类代码,以下为调用代码

public class PersonTest{

public static void main(String[] args){

Person liudun = new Person();

Person.showDetails("刘顿","男",23);

}

}

1、在静态方法中不能直接访问实例变量和实例方法。

2、在实例方法中可以直接调用类中定义的静态变量和静态方法

**********************************************************

4种基本行为:

1)访问修饰符:公共的 私有的 受保护的 默认的

2)返回类型:

有:变量的定义 数据类型 变量名

没有:void

3)方法名:和类名的规范类似

a、方法名首字母小写

b、方法名由多个单词组成,从第二个单词开始,首字母大写

c、方法名要有意义

4)参数:

有:变量的声明部分(boolean flag)

没有:()

5)方法体:作用域{ }

a、并列:多个方法可以并列

b、嵌套:方法不能嵌套;可以嵌套流程控制 {if ( ) { }}

第一种基本行为:访问修饰符 没有返回类型 方法名(没有){ }

例:public void add( ){ }

第二种基本行为:访问修饰符 没有返回类型 方法名(有){ }

例:public void add (int num1,int num2){ }

1、变量声明的过程:形参 形式上的参数

2、变量赋值的过程:实参 实际上的参数

第三种基本行为:访问修饰符 有返回类型 方法名(没有){ }

例:public int add( ){ }

1、关键字:return 后面写的是变量名,返回类型位置写的是变量的数据类型

2、return后面不能再写代码了

第四种基本行为:访问修饰符 有返回类型 方法名(有){ }

把第二种和第三种合在一起

例:public int add(int num1,int num2){ }

**********************************************************

继承的语法:

访问修饰符 class <SubClass> extends <SuperClass>{ }

在java中,继承通过extends关键字实现,其中SubClass称为子类,SuperClass称为父类或基类。

访问修饰符如果是public,那么该类在整个项目可见。

不写访问修饰符,则该类只在当前包可见。

在java中,子类可以从父类中继承以下内容:

可以继承public和protected修饰的属性和方法,不论子类和父类是否在同一个包里

可以继承默认访问修饰符修饰的属性和方法,但是子类和父类必须在同一个包里

无法继承父类的构造方法

**********************************************************

super使用的语法:

访问父类构造方法:super(参数)

访问父类属性/方法:super.<父类属性/方法>

super只能出现在子类(子类的方法和构造方法)中,而不是其他位置

super用于访问父类的成员,如父类的属性、方法、构造方法。

具有访问权限的限制,如无法通过super访问private

**********************************************************

实例化子类对象:

在java中,一个类的构造方法在如下两种情况中总是会执行:

1、创建该类的对象(实例化)

2、创建该类的子类的对象(子类的实例化)

因此,子类在实例化时,会首先执行其父类的构造方法,然后才执行子类的构造方法。

子类继承父类时构造方法的调用规则如下:

1、如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,是否写super()语句,效果是一样的。

2、如果子类的构造方法中通过super显示调用父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类无参构造方法。

3、如果子类的构造方法中通过this显示调用自身的其他构造方法,在相应构造方法中应用以上两条规则

如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。

**********************************************************

Object类:

Object类是所有类的父类。在java中,所有java类都直接或间接的继承了java.lang.Object类

关键代码:

public class Person{

}

//两种写法等价

public class Person extends Object{

}

**********************************************************

Object类的部分方法

方法 说明

toString() 返回当前对象本身的有关信息,按字符串对象返回

equals() 比较两个对象是否是同一个对象,若是,返回true

clone() 生成当前对象的一个副本,并返回

hashCode() 返回该对象的哈希代码值

getClass() 获取当前对象所属的类信息,返回Class对象

**********************************************************

方法重写和方法重载的区别:

比较项   位置   方法名   参数表     返回值       访问修饰符

方法重写  子类   相同     相同    相同或是其子类   不能比父类更严格

方法重载  同类   相同    不相同      无关         无关

**********************************************************

多态:

例:宠物类Pet,有几个子类,宠物类定义了看病的方法toHospital(),子类分别重写看病方法,关键代码:

class Pet{

public void toHospital(){

system.out.println(“宠物看病!”)

}

}

class Dog extends Pet{

public void toHostipal(){

system.out.println(“小鸟看病”)

}

}

public class Test{

public static void main(String[] args){

Pet pet;

pet = new Dog();

pet.toHospital();

pet = new Bird();

pet.toHospital();

}

}

示例中,Pet类一般声明为抽象方法,因为其本身实例化没有任何意义,toHopital()方法声明为抽象类。

抽象类不能被实例化

子类如果不是抽象类,则必须重写抽象类中的全部抽象方法

abstract修饰符不能和final修饰符一起使用

abstract修饰的抽象方法没有方法体

private关键字不能修饰抽象方法

**********************************************************

抽象方法:

抽象方法没有方法体

抽象方法必须在抽象类里

抽象方法必须在子类中被实现,除非子类是抽象类

**********************************************************

向上转型的语法:

子类到父类的转换称为向上转型

<父类型><引用变量名> = new <子类型>();

将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换

此时通过父类引用变量调用的方法时子类覆盖或继承父类的方法,不是父类的方法

此时通过父类引用变量无法调用子类特有的方法

**********************************************************

向下转型的语法:

<子类型><引用变量名> = (<子类型>)<父类型的引用变量>

**********************************************************

instanceof运算符:

用于判断一个对象是否属于一个类

在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常

例:判断宠物类型,关键代码:

public class Test{

public static void main(String[] args){

Pet pet = new Bird();

pet.toHospital();

if(pet instanceof Dog){

Dog dog = (Dog) pet;

dog.catchingFlyDisc();

}else if(pet instanceof Bird){

Bird biird = (Bird) pet;

bird.fly();

}

}

}

使用instanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系,否则会出现编译错误。

**********************************************************

多态的应用:

1、使用父类作为方法的形参

例:一个主人类,在该类中定义控制动物叫的方法。  关键代码:

class Host{

public void letCry(Animal animal){

animal.cry();

}

}

public class Test{

public static void main (String[] args){

Host host = new Host;

Animal animal;

animal = new Dog();

host.letCry(animal);

animal = new Cat();

host.letCry(animal);

animal = new Duck();

host.letCry(animal);

}

}

2、使用父类作为方法的返回值

使用父类作为方法的返回值,也是Java中实现和使用多态的主要方式

例:主人送出三种动物,送出的动物可以叫。  关键代码:

class Host{

public Animal donateAnimal(String type){

Animal animal;

if(type=="dog"){

animal = new Dog();

}else if(type=="cat"){

animal = new Cat();

}else{

animal = new Duck();

}

return animal;

}

}

public class Test{

public static void main(String[] args){

Host host = new Host;

Animal animal;

animal = host.donateAnimal("dog");

animal.cry();

animal = host.donateAnimal("cat");

animal.cry();

}

}

时间: 2024-10-19 15:55:09

java基础知识总结(1)的相关文章

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

第1天:了解Java基础知识

Java的优势 1. 简单 不像C或者C++语言,Java中省去了对指针的操作.但是,Java中并没有省去指针,代替指针的是一种新的变量--引用,引用也是保存一个对象的内存地址. 2.方便 Java虚拟机自带垃圾回收器,能够自动回收内存资源.而C和C++语言,需要开发人员手动进行内存资源回收. 3.安全 不支持指针操作 4.平台无关性 Java语言是跨平台的,一次编译,到处运行. 而且,不同平台,C语言中数据类型所占的位数是不同的,而Java语言中,数据类型所占的位数是固定的. 5.面向对象 J

JAVA基础知识-java文化基础和运行环境

JAVA基础知识 1,java是95年sun公司推出的开发语言,发展很快,09年被oracle公司收购.至今分为SE.ME.EE三个发展方向和软件版本. 2,运行java的环境主要是通过JVM(java virtual machine)实现的.首先编写.java结尾的源文件,通过编译器编译成.class结尾的字节码文件,然后通过解释器实现在不同平台上一致运行的效果. 3,jvm,jre和jdk的区别:jvm,java虚拟机:jre,java运行环境,jdk:java开发工具包. 4,jdk的下载

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

Java基础知识——类装载器与反射机制

类装载器ClassLoader 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件. 类装载器把一个类装入JVM中,要经过三步: 1.装载:查找和导入Class文件: 2.链接:执行校验.准备和解析(解析是可以选择的): 3.初始化:对类的静态变量.静态代码块执行初始化工作: 类装载工作由ClassLoader及其子类负责.JVM在运行时会产生三个ClassLoader:根装载器.ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器). 根装

JAVA基础知识整理

一.首先先明白get与post的基本定义和区别: 这是两种在客户端和服务器端进行请求-响应的方法. 1get:从指定的资源请求数据. 2post:向指定的资源提交要处理的数据. get基本上用于从服务器取回数据,注意:get方法可能返回缓存数据. post可以从服务器上获取数据,不过,post方法不会缓存数据,并且常用语连同请求一起发送数据. 二. Jquery $.get()方法. $.get()方法通过Http Get发起请求,从服务器上请求数据. 语法:&.get(URL,callback

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int

java基础知识回顾之---java String final类普通方法

辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      *      * 1,获取:     * 1.1 获取字符串中字符的个数(长度).     *         int length();     * 1.2 取字符串中的某一个字符,其中的参数index指的是字符串中序数.字符串的序数从0开始到length()-1 .     *