20\21.static关键字

  /**
* static关键字
* 1.用static修饰后的方法,称为静态方法.
* 2.静态的方法特点,可以使用 类名.方法名称 调用方法
* 3.静态方法只能调用静态方法/字段,非静态方法,既可以调用静态方法/字段,也可以调用非静态方法/字段
* 4.被static 修饰后的字段是共享的
*/

  

  

  

  堆栈简单分析:

  

  代码:

 package com.day01.station.staticDemo;

 /**
* Created by Administrator on 2018/3/23.
*
* 类: 方法 (普通方法 构造方法)
* 字段/属性
* 代码块
*/
public class StaticObj {
private String name;
private Integer age;
private static String conuntry; /**
* static关键字
* 1.用static修饰后的方法,称为静态方法.
* 2.静态的方法特点,可以使用 类名.方法名称 调用方法
* 3.静态方法只能调用静态方法/字段,非静态方法,既可以调用静态方法/字段,也可以调用非静态方法/字段
* 4.被static 修饰后的字段是共享的
*/
public static void say(){//修饰的是放方法
//System.out.println("-----我是一个方法---------"+name);
say3();
} public void say2(){
System.out.println("-----我是一个方法2---------"+name+age);
say();
} public static void say3(){
System.out.println("-----我是一个方法3---------");
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getConuntry() {
return conuntry;
} public void setConuntry(String conuntry) {
StaticObj.conuntry = conuntry;
}
}

  测试

 package com.day01.station.staticDemo;

 import org.junit.Test;

 /**
* Created by Administrator on 2018/3/23.
*/
public class TestStaticObj {
/**
* 测试目的: 验证加了static修饰的字段只用一份,是共享的
* 创建两个对象 第一个设置国家为中国 第一个设置国家为美国,如果后面的可以覆盖前面的,那么确实是共享的
*/
@Test
public void test3(){
// 创建两个对象
StaticObj staticObj1 = new StaticObj();
StaticObj staticObj2 = new StaticObj(); staticObj1.setConuntry("中国"); staticObj2.setConuntry("美国");
String conuntry2 = staticObj2.getConuntry();
System.out.println("conuntry2= "+conuntry2); String conuntry1 = staticObj1.getConuntry();
System.out.println("conuntry1= "+conuntry1); // System.out.println(" staticObj1= "+staticObj1);
// System.out.println(" staticObj2= "+staticObj2);
}
@Test
public void test2(){
StaticObj.say();
}
@Test
public void test(){
//以前
StaticObj staticObj = new StaticObj();
staticObj.say(); }
}

22.构造代码块与静态代码块

  代码:

 package com.day01.station.model;

 /**
* Created by lidongping on 2018/5/2.
*/
public class LoginUser2 {
private Integer id;
private String userName; /**
* 静态代码块 作用:初始化对象
* 1.只执行一次,不论创建多少个对象
*/
static {
System.out.println("------我是静态代码块-----");
} /**
* 构造代码块
* 1.每次创建对象都执行一次
* 2.可以有多个构造代码块,但是生产上一般只有一个
*/
{
System.out.println("-------我是构造代码块1------");
} /**
* 构造方法
*/
public LoginUser2() {
System.out.println("-------我是构造方法-----");
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
}
}

代码

  测试代码

 package com.day01.station.testDao;

 import com.day01.station.model.LoginUser2;
import org.junit.Test; /**
* Created by lidongping on 2018/5/2.
*/
public class TestLoginUser2 {
//测试构造代码块
@Test
public void test(){
LoginUser2 loginUser2 = new LoginUser2();
System.out.println("loginUser2="+loginUser2); LoginUser2 loginUser3 = new LoginUser2();
System.out.println("loginUser2="+loginUser3);
}
}

测试

23.接口简单使用

     

接口

 package com.day01.station.dao;

 import com.day01.station.model.Product;

 public interface IProductDao {
//增
public void save(String productName, int salePrice);
//删
public void delete(int id);
//改
public void update(int id,int salePrice,int costPrice);
//查
public Product query(int id);
}

接口

  实现

 package com.day01.station.dao.impl;

 import com.day01.station.dao.IProductDao;
import com.day01.station.model.Product; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; public class ProductDao implements IProductDao {
@Override
public void save(String productName, int salePrice) {
System.out.println("--------我是增加方法---------");
System.out.println(" productName = " + productName + " , salePrice =" + salePrice);
try {
//1. 加载
Class.forName("com.mysql.jdbc.Driver");
// * 2. 连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_web", "root", "admin");
// PreparedStatement prepareStatement(String sql)
// 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
String sql = "INSERT INTO product (product_name,sale_price) VALUES (?,?)";
//3.创建 预编译语句
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// void setString(int parameterIndex, String x)将指定参数设置为给定 Java String 值。
preparedStatement.setString(1, productName);
preparedStatement.setInt(2, salePrice);
//添加参数
//preparedStatement.set
//4.执行
preparedStatement.executeUpdate();//重要提醒 不需要传入sql语句
//5.释放资源
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
}
} @Override
public void delete(int id) {
System.out.println(" --------我是删除方法--------- ");
System.out.println("---id=" + id); try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建 预 编译语句
String sql = "DELETE FROM product WHERE id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//设定参数
preparedStatement.setInt(1, id);
//4.执行语句
preparedStatement.executeUpdate();
//5.释放资源
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
}
} @Override
public void update(int id, int salePrice, int costPrice) {
System.out.println("--------我是修改方法---------");
try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建编译语句
String sql = "UPDATE product SET sale_price=?,cost_price=? WHERE id= ? ";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, salePrice);
preparedStatement.setInt(2, costPrice);
preparedStatement.setInt(3, id);
//4.执行语句
preparedStatement.executeUpdate();
//5.释放资源
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
}
} @Override
public Product query(int id) {
System.out.println("------我是查询方法----------");
Product product = new Product();//袋子
try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建编译语句
String sql = "SELECT id,product_name,sale_price FROM product WHERE id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, id);
//4.执行语句
ResultSet resultSet = preparedStatement.executeQuery();
//解析结果
while (resultSet.next()) {//如果有在执行里面
int id1 = resultSet.getInt("id");
String productName = resultSet.getString("product_name");
int salePrice = resultSet.getInt("sale_price");
//封装 袋子
//装
product.setId(id1);
product.setProductName(productName);
product.setSalePrice(salePrice);
}
//5.释放资源
resultSet.close();
preparedStatement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
return product;
}
}

实现

  测试

 package com.day01.station.testDao;

 import com.day01.station.dao.impl.ProductDao;
import org.junit.Test; /**
* Created by lidongping on 2018/5/2.
*/
public class TestDao {
@Test
public void test(){
//1.创建dao对象
ProductDao productDao = new ProductDao();
//2.调用dao的方法
productDao.save("苹果10",8000); }
}

实现

24.业务层实现

  

  业务层接口代码

 package com.day01.station.service;

 /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/ import com.day01.station.model.Product; /**
* 业务层接口命名规则: I+模型名称+Service 例如:IProductService
*/
public interface IProductService {
//增
public void save(Product product);
//删 根据id删除
public void delete(Integer id);
//改
public void update(Product product);
//查 根据id查询产品
public Product query(Integer id);
}

  业务层实现代码

 package com.day01.station.service.impl;

 import com.day01.station.dao.impl.ProductDao;
import com.day01.station.model.Product;
import com.day01.station.service.IProductService; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
public class ProductService implements IProductService{
ProductDao productDao = new ProductDao(); @Override
public void save(Product product) {
//1.创建dao对象 //调用持久层保存方法
String productName = product.getProductName();
Integer salePrice = product.getSalePrice();
productDao.save(productName,salePrice); } @Override
public void delete(Integer id) {
productDao.delete(id);
} @Override
public void update(Product product) {
productDao.update(product.getId(),product.getSalePrice(),product.getCostPrice());
} @Override
public Product query(Integer id) {
Product prduct = productDao.query(id); return prduct;
}
}

03_java基础(八)之static关键字与代码块的更多相关文章

  1. 零基础学习java------day8------javabean编写规范,继承,static关键字,代码块,单例设计模式

    0. 今日内容提要 1. javabean书写规范 javabean:一个普通的类,用来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据. 比如:Teacher,Student,Mobile. ...

  2. java static关键字和代码块

    static关键字 代码块 方法重写 1. 方法重写的特点: 2. 注意事项: static关键字 为什么需要学习static关键字? 针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑 ...

  3. static关键字和代码块

    static关键字 static修饰的变量称为静态变量/共享变量/类变量 用于修饰类的成员,如成员变量.成员方法以及代码块等,内static修饰的成员具备一些特殊性 1.静态变量 在java类中使用s ...

  4. Java 基础 面向对象之关键字内部类代码块修饰符

    final final概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后 ...

  5. JAVA核心技术I---JAVA基础知识(static关键字)

    一:static特殊关键字用处 –变量 –方法 –类 –匿名方法 二:静态变量:类共有成员 –static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在. –所有的对象实例,对于静态变量都 ...

  6. java基础学习总结——static关键字

    一.static关键字

  7. [java基础]java中static关键字

    1.static概念 static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序 ...

  8. 黑马程序员——JAVA基础之主函数main和静态static,静态代码块

    ------- android培训.java培训.期待与您交流! ---------- 主函数:是一个特殊的函数.作为程序的入口,可以被jvm调用. 主函数的定义: public:代表着该函数访问权限 ...

  9. 构造方法、封装、关键字(this、static)和代码块的介绍

    1.构造方法 1.1 构造方法与成员方法的区别 构造方法分为无参构造和有参构造,其中有参构造方法和无参构造方法为方法的重载关系. 构造方法在初始化一个类的对象时进行调用,它没有返回值,方法名与类名相同 ...

随机推荐

  1. 函数的嵌套+nonlocal和global关键字(重点)

    1.在函数中声明函数 在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置 # 函数的互相调用 # def func1(): # pri ...

  2. ES6入门箭头函数

    箭头函数: 箭头函数可以与变量结构相结合(箭头函数返回对象的时候必须要在对象外边加()) 注意: 1️⃣函数体内的this是定义时所在的对象,而不是使用时的对象 2️⃣不可以当成构造函数,不可用new ...

  3. ubuntu 16042 安装过程

    IDE接口的硬盘被称为hd SCSI和SATA接口的硬盘则被称为sd 第1块硬盘称为sda, 第2块硬盘称为sdb 一块硬盘最多有4个主分区,主分区以外的分区称为扩展分区,硬盘可以没有扩展分区,但是一 ...

  4. mongodb的Limit|skip|投影|排序|消除重复

    Limit 方法limit():用于读取指定数量的文档 语法: db.集合名称.find().limit(NUMBER) 参数NUMBER表示要获取文档的条数 如果没有指定参数则显示集合中的所有文档 ...

  5. Linux:DNS服务器搭建及配置

    1.yum install -y bind bind-chroot bind-utils 2.编辑DNS主配置文件 vim /etc/named.conf   修改如下标红色处即可: options ...

  6. 《算法》第四章部分程序 part 1

    ▶ 书中第四章部分程序,加上自己补充的代码,包含无向 / 有向图类 ● 无向图类 package package01; import java.util.NoSuchElementException; ...

  7. 《锋利的JQuery》中重写超链接与图片提示效果

    代码部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...

  8. PHP微信公共号授权,获取openid、unionid。

    /** * 获取code * @return code code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期 */ publ ...

  9. 使用RecyclerView打造Gallery

    RecyclerView概述 RecyclerView是谷歌推出的用于向大型数据集提供有限窗口的灵活视图.可以通过导入support-v7对其进行使用. 据官方的介绍,该控件用于在有限的窗口中展示大量 ...

  10. Ubuntu 安装微信

    参考:https://blog.csdn.net/deeposcar/article/details/80710843