1 构造方法重载

  在一个类内部,编写多个构造方法,创建对象的时候,根据需求的不同,调用不同的构造方法创建对象,实现不同的初始化。

  案例:Demo1

public class Demo1 {
public static void main(String[] args) {
// 长方体
Box box1 = new Box(100,60,90);
box1.show();
box1.showTiji();
// 正方体
Box box2 = new Box(100);
box2.show();
box2.showTiji();
}
}
class Box{
//属性
int length;
int width;
int height;
//构造方法
//长方体
Box(int length,int width,int height){
this.length = length;
this.width = width;
this.height = height;
}
//正方体
Box(int length){
this.length = length;
this.width = length;
this.height = length;
}
//方法:
void show(){
System.out.println(length+","+width
+","+height);
}
void showTiji(){
int result = length * width * height;
System.out.println("体积是"+result);
}
} public class Demo2 {
public static void main(String[] args) {
Customer cus1 =
new Customer("韩信",33,"将军");
cus1.show();
Customer cus2 =
new Customer("李白",21,"诗人",
"123","洛阳","bai@126.com");
cus2.show();
cus2.showAll();
}
}
class Customer{
//属性
String name;
int age;
String job;
String password;
String address;
String email;
//构造方法
Customer(String name,int age,
String job){
this.name = name;
this.age = age;
this.job = job;
}
Customer(String name,int age,
String job,String password,
String address,String email){
this.name = name;
this.age = age;
this.job = job;
this.password = password;
this.address = address;
this.email = email;
}
//方法
void show(){
System.out.println(name+","+age+","
+job);
}
void showAll(){
System.out.println(name+","+age+","
+job+","+password+","+address
+","+email);
}
}

2 static

  静态的,可以用来修饰属性,方法以及代码块。
  1)静态变量(静态属性):使用static修饰的属性,称为静态变量,静态变量在内存中单独开辟存储空间,不依赖于对象而存在,可以通过类名.静态变量名直接进行访问。
    访问方式:
      类名.静态变量名
      或者
      对象名.静态变量名
    案例:Demo3

public class Demo3 {
public static void main(String[] args) {
//类名.静态变量名
System.out.println(Foo.name);
// System.out.println(Foo.age);
//age是一个普通属性,只有在创建对象以后,才会为age
//属性开辟存储空间。必须先有对象,然后才可以访问age
//属性
//对象名.静态变量名
Foo foo = new Foo();
System.out.println(foo.name);
System.out.println(foo.age);
}
}
class Foo{
//静态变量不依赖于对象而存在,内存中单独开辟存储空间,
//可以通过类名.静态变量名直接访问。
static String name = "张三";//静态变量
int age = 21;//普通属性
}

  2)静态方法:使用static修饰的方法,称为静态方法,不依赖于对象而存在,可以通过类名.静态方法名(参数)直接访问。
    案例:Demo4

public class Demo4 {
public static void main(String[] args) {
//类名.静态方法名(参数)
Koo.f1();
//对象名.静态方法名(参数)
Koo koo = new Koo();
koo.f1();
}
}
class Koo{
static void f1(){
System.out.println("今天天气很好!");
}
}

    访问方式:
      类名.静态方法名(参数)
      或者
      对象名.静态方法名(参数)
  3)如果main方法跟静态方法在同一个类中,在main方法中,可以直接使用静态方法名(参数)来访问静态方法。
    案例:Demo5

public class Demo5 {
static void f1(){
System.out.println("今天风真大!");
System.out.println("静态方法");
}
public static void main(String[] args) {
f1();
}
} public class Demo6 {
public static void main(String[] args) {
for(int i=1;i<=100;i++){
double num = Math.random();
System.out.println(num);
}
}
}

  4)sun设计的工具类中经常使用到静态方法,用户可以不用创建该工具类的对象,就可以访问这些静态方法,使用方便。
    Math(数学)是sun公司设计的一个工具类,Math内部所有的方法都是静态方法。
    random():是一个静态方法,用来返回一个随机的小数,取值范围在[0.0,1.0)
    案例:Demo7

public class Demo7 {
//创建一个double类型数组ary,包含200个元素,通过
//Math.random()生成的随机给数组元素赋值。最后
//使用两种for循环,输出每一个元素的值。
public static void main(String[] args) {
double[] ary = new double[200];
for(int i=0;i<=ary.length-1;i++){
ary[i] = Math.random();
}
for(int i=0;i<=ary.length-1;i++){
System.out.println(ary[i]);
}
System.out.println();
System.out.println();
System.out.println();
for(double num : ary){
System.out.println(num);
}
}
} public class Demo8 {
//在main方法中,创建一个包含了100个元素的double
//类型的数组,使用Math.random()生成的随机数给
//数组元素赋值。
//1 使用两种for循环输出每一个元素的值
//2 求出所有元素的累加之和
//3 求出元素的平均值
public static void main(String[] args) {
double[] ary = new double[100];
for(int i=0;i<=ary.length-1;i++){
ary[i] = Math.random();
System.out.println(ary[i]);
}
System.out.println();
for(double num:ary){
System.out.println(num);
}
double sum = 0;
for(double num:ary){
sum = sum + num;
}
System.out.println("累加之和:"+sum);
double avg = sum/100;
System.out.println("平均值是:"+avg);
}
}

  5)代码块:使用{}括起来的一段代码,每次创建对象的时候都会默认的调用代码块一次。
    案例:Demo9

public class Demo9 {
public static void main(String[] args) {
Eoo eoo1 = new Eoo();
Eoo eoo2 = new Eoo();
Eoo eoo3 = new Eoo();
}
}
class Eoo{
{
System.out.println("海阔天空");
System.out.println("我变了 我没变");
System.out.println("喜欢你");
}
}

  6)静态代码块:使用static修饰的代码块称为静态代码块,不管创建该类多少个对象,静态代码块只执行一次。
    案例:Demo10

public class Demo10 {
public static void main(String[] args) {
Moo moo1 = new Moo();
Moo moo2 = new Moo();
Moo moo3 = new Moo();
}
}
class Moo{
static{
System.out.println("围城");
System.out.println("幻城");
System.out.println("三重门");
}
}

    经常使用静态代码块来保存连接数据库的信息,比如密码...

3 this

  当前的,现在的
  1)this.属性:指代当前的属性。
  2)this(参数):在当前的构造方法中,调用本类中其他的构造方法。跟构造方法重载结合使用。
    必须在当前构造方法的第1行使用。
    案例:Demo11

public class Demo11 {
public static void main(String[] args) {
Person p1 =
new Person("乔峰",33,"帮主",
"襄阳","feng@126.com");
p1.show();
}
}
class Person{
//属性
String name;
int age;
String job;
String address;
String email;
//构造方法
Person(String name,int age,String job,
String address){
this.name = name;
this.age = age;
this.job = job;
this.address = address;
}
//给每一个属性赋值
Person(String name,int age,String job,
String address,String email){
//this(参数):在当前的构造方法中调用本类中其他的
//构造方法。必须在当前构造方法的第1行使用。
this(name,age,job,address);
this.email = email;
}
//方法:
void show(){
System.out.println(name+","+age+","
+job+","+address+","+email);
}
} public class Demo12 {
public static void main(String[] args) {
User user =
new User("张三",29,"经理",
"abc",30000.99,"北京");
user.show();
user.showAll();
}
}
class User{
//属性
String name;
int age;
String job;
String password;
double salary;
String address;
//构造方法
User(String name,int age,String job){
this.name = name;
this.age = age;
this.job = job;
}
User(String name,int age,String job,
String password,double salary,
String address){
this(name,age,job);
this.password = password;
this.salary = salary;
this.address = address;
}
//方法
void show(){
System.out.println(name+","+age+","
+job);
}
void showAll(){
//this.方法名(参数):在当前的方法中,调用本类中
//其他的方法
this.show();
System.out.println("密码:"+password);
System.out.println("工资:"+salary);
System.out.println("地址:"+address);
}
}

  3)this.方法名(参数):在当前方法中调用本类的其他方法

4 继承

  继承的本质就是代码的“复制”。
  案例:Demo13

public class Demo13 {
public static void main(String[] args) {
Person2 p1 = new Person2();
p1.name = "李世民";
p1.age = 32;
p1.address = "长安";
p1.show();
Teacher t1 = new Teacher();
t1.name = "李治";
t1.age = 21;
t1.address = "洛阳";
t1.salary = 20000.1;
t1.email = "zhi@126.com";
t1.show();
t1.showAll();
}
}
class Person2{//父类
//属性
String name;
int age;
String address;
//方法
void show(){
System.out.println(name+","+age+","
+address);
}
}
//class 子类 extends 父类
class Teacher extends Person2{//子类
//属性:姓名,年龄,地址,工资,邮箱
//继承父类Person2中的姓名,年龄,地址
double salary;
String email;
//方法:
//继承父类中show()方法
void showAll(){
this.show();//调用父类中继承过来show()方法
System.out.println("工资:"+salary);
System.out.println("邮箱:"+email);
}
}

  1)子类会继承父类中所有的属性和方法
  2)格式:
    class 子类 extends 父类{
      继承父类的属性和方法
      在子类中编写其他的属性和方法。
    }
    案例:Demo14

public class Demo14 {
public static void main(String[] args) {
Worker worker = new Worker();
worker.name = "张翠山";
worker.job = "大侠";
worker.age = 31;
worker.address = "冰火岛";
worker.phone = "13333333333";
worker.salary = 200000.1;
worker.show();
worker.showYearSal();
worker.showAll();
}
}
class Emp{
//属性
String name;
int age;
String job;
double salary;
//方法
void show(){
System.out.println(name+","+age+","+
job+","+salary);
}
void showYearSal(){
double result = salary * 12;
System.out.println(name+"的年薪是"+
result);
}
}
//设计一个父类Emp
//属性:姓名,年龄,职位,工资
//方法:void show():输出姓名,年龄,职位,工资
//void showYearSal():输出姓名和年薪(工资*12)
class Worker extends Emp{
//属性
String address;
String phone;
//方法
void showAll(){
this.show();
System.out.println("地址:"+address);
System.out.println("电话:"+phone);
}
}

  3)Java中永远是单继承,一个子类只能有一个直接的父类,但是可以层层继承。
    案例:Demo15

public class Demo15 {
public static void main(String[] args) {
Foo4 foo = new Foo4();
System.out.println(foo.num1);
System.out.println(foo.num2);
System.out.println(foo.num3);
System.out.println(foo.num4);
}
}
class Foo1{
int num1=100;
}
class Foo2 extends Foo1{
//num1
int num2=200;
}
class Foo3 extends Foo2{
//num1,num2
int num3=300;
}
class Foo4 extends Foo3{
//num1,num2,num3
int num4=400;
}

Java语言基础(12)的更多相关文章

  1. java语言基础02

    一.Java语言基础(常量的概述和使用)(掌握) 1:什么是常量 就是在程序的执行过程中其值不发生改变的量. 2:Java中常量的分类 (1):字面值常量 (2):自定义常量(面向对象部分讲解) 3: ...

  2. Java之--Java语言基础组成—函数

    Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...

  3. Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)

    Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...

  4. Java语言基础(七)

    Java语言基础(七) 今天在公司多呆了会,回来晚了 一.自动类型转换 在Java中,数据是可以转换的  例如可以将byte类型的赋给int类型的 这里希望你了解内存的变化,例如 在这里,我想你应该知 ...

  5. Java语言基础(六)

    Java语言基础(六) 前一章提到的, BigDecimal, DecimalFormat等具体用法,这里就不在说了,网上有许多 一.下面让我们看一个例子(自由落体运动位移) 说明: (1).公式是 ...

  6. Java入门篇(二)——Java语言基础(下)

    上篇说到Java中的变量与常量,接下来就是简单的计算了,首先需要了解一下Java中的运算符. 六.运算符 1. 赋值运算符 赋值运算符即"=",是一个二元运算符(即对两个操作数进行 ...

  7. 第二十六节:复习Java语言基础-Java的概述,匿名对象,封装,构造函数

    Java基础 Java语言概述 Java语言 语言 描述 javaee 企业版 javase 标准版 javame 小型版 JDK JDK(Java开发工具包) Java语言 语言 Java语言 Ja ...

  8. 第二十二节:Java语言基础-详细讲解位运算符与流程控制语句

    位运算符(二进制位运算) 运算符 运算 例子 << 左移 3 << 2 = 12 --> 3 * 2 * 2 =12 >> 右移 3 >> 1 = ...

  9. 第二十一节:Java语言基础-关键字,标识符,注释,常量和变量,运算符

    Java语言基础-关键字,标识符,注解,常量和变量,运算符 class Demo { public static void main(String[] args){ System.out.printl ...

随机推荐

  1. 解决使用wamp怎么使用php命令行

    用了wamp,把php加到环境变量就报错啊! 那怎么用命令行啊! 可以找么着:(比如想执行 php think build --module demo) E:\php-project\tp5.> ...

  2. prometheus 的promsql的经典例子 安装grafana

    0.好的参考文档 https://www.cnblogs.com/longcnblogs/p/9620733.html 1.多维度数据 2.Prometheus的全局监控指标 只需要定义一个全局的指标 ...

  3. Android Service 入门

    说明 Service 工作在主进程上.生命周期图 两种状态 Started 比如Activity通过调用startService 方法.一旦被启动(Started),服务就永久在后台运行,即使创建他的 ...

  4. mysql数据库之事务与存储过程

    事务 什么是事务? 事务是指一些SQL语句的集合,这些语句同时执行成功完成某项功能 事务的CAID特性: 原子性:一个事务的执行是整体性的,要么内部所有语句都执行成功,要么一个都别想成功 一致性:事务 ...

  5. PTA(Advanced Level)1083.List Grades

    Given a list of N student records with name, ID and grade. You are supposed to sort the records with ...

  6. [转帖]英特尔首款采用10nm技术的混合CPU“Lakefield”即将发布

    英特尔首款采用10nm技术的混合CPU“Lakefield”即将发布 intel 也出soc了 里面的东西 跟 安卓和 apple的a系列很像. https://baijiahao.baidu.com ...

  7. POJ - 3249 Test for Job (在DAG图利用拓扑排序中求最长路)

    (点击此处查看原题) 题意 给出一个有n个结点,m条边的DAG图,每个点都有权值,每条路径(注意不是边)的权值为其经过的结点的权值之和,每条路径总是从入度为0的点开始,直至出度为0的点,问所有路径中权 ...

  8. Dijkstra(模板)

    #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...

  9. Spring 注解介绍

    @Component与@Bean的区别 @Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean. @Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注 ...

  10. Q_OBJECT提供了信号槽机制、国际化机、RTTI 的反射能力(cpp中使用Q_OBJECT导致无法处理moc,就需要#include “moc_xxx.h”)

     只有继承了QObject类的类,才具有信号槽的能力.所以,为了使用信号槽,必须继承QObject.凡是QObject类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_OBJECT.不管是不 ...