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. linux中测试py脚本使用debug模式

    python -mtrace --trace ping_host.py

  2. 20165205 预习作业三 Linux安装及学习

    Linux安装及学习 安装Ubuntu 1)安装版本 在安装VirtualBox时选择了VirtualBox 5.2.6 platform package 安装Ubuntu时选择了Ubuntu 16. ...

  3. django, tornado

    django  由多线程写的 tornaod  由epoll机制

  4. 【Excel技能】字符串包含某字符串个数?替换许多组字符串?

    =len(单元格A)-len(substitute(单元格A,某字符串,)) 原理:将某字符串替换成空,前后字符串长即为减去的这个字符串长度,这个字符串出现个数=前后字符串长度之差/这个字符串长度 = ...

  5. 开发升级-微信小程序(感谢黄秀杰老师)

    借助老师的博客 初次认识到了小程序开发的便捷,同时也深刻的感受到了,时代在不断地进步,编译将更加平民化,每一个人都将可以动手创造一款不错的软件 在黄秀杰老师的模板下,同时进行了修改,也在老师的模板下, ...

  6. PHP微信公共号H5页面跳转小程序。

    1.H5跳转小程序. function myfun(){ var openid = "<?=$_SESSION['openid']?>"; wx.miniProgram ...

  7. nslookup和dig命令

    nslookup与dig两个工具功能类似,都可以查询制定域名所对应的ip地址,所不同的是dig工具可以从该域名的官方dns服务器上查询到精确的权威解答,而nslookup只会得到DNS解析服务器保存在 ...

  8. Flex学习笔记--多层菜单按钮

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  9. centos7+hadoop完全分布式集群搭建

    Hadoop集群部署,就是以Cluster mode方式进行部署.本文是基于JDK1.7.0_79,hadoop2.7.5.  1.Hadoop的节点构成如下: HDFS daemon:  NameN ...

  10. Redis位图实现用户签到功能

    场景需求 适用场景如签到送积分.签到领取奖励等,大致需求如下: 签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等. 如果连续签到中断,则重置计数,每月初重置计数. 当月签到满 ...